Используя математику в ссылке блога John Cook,
public static long IntPower(int x, short power)
{
if (power == 0) return 1;
if (power == 1) return x;
// ----------------------
int n = 15;
while ((power <<= 1) >= 0) n--;
long tmp = x;
while (--n > 0)
tmp = tmp * tmp *
(((power <<= 1) < 0)? x : 1);
return tmp;
}
для обращения к возражению, что код не будет работать при изменении типа питания, хорошо... не принимая во внимание точку, что любой, кто изменяет код, они не понимают и затем используют его без тестирования.....
, но решать проблему, эта версия защищает глупое от той ошибки... (Но не от несметного числа других они могли бы сделать), ПРИМЕЧАНИЕ: не протестированный.
public static long IntPower(int x, short power)
{
if (power == 0) return 1;
if (power == 1) return x;
// ----------------------
int n =
power.GetType() == typeof(short)? 15:
power.GetType() == typeof(int)? 31:
power.GetType() == typeof(long)? 63: 0;
long tmp = x;
while (--n > 0)
tmp = tmp * tmp *
(((power <<= 1) < 0)? x : 1);
return tmp;
}
Также попытка этот рекурсивный эквивалент (медленнее, конечно):
public static long IntPower(long x, int power)
{
return (power == 0) ? x :
((power & 0x1) == 0 ? x : 1) *
IntPower(x, power >> 1);
}
Проверка, что Все Файлы Включены в Ваш Проект:
у меня было это то же ошибочное всплывающее окно после того, как я обновил cLion. После часов лужения я заметил, что один из моих файлов не был включен в цель проекта. После того, как я добавил его назад к активному проекту, я прекратил получать неопределенную ссылку на winmain16 и скомпилированный код.
Редактирование: также стоит проверить настройки сборки в Вашем IDE.
(Не уверенный, если эта ошибка связана с тем, что недавно обновила IDE - могло бы быть причинным или просто коррелятивным. Не стесняйтесь комментировать с любым пониманием тот фактор!)