Math.Pow
, кажется, работает неправильно для больших результатов. Вероятно, это потому, что для расчетов используется double
(How is Math.Pow() implemented in .NET Framework?).Существуют ли какие-либо встроенные .NET-альтернативы для использования мощности числа (Math.Pow) без ошибок?
Например:
public static void Main()
{
Console.WriteLine((long)Math.Pow(17, 13));
Console.WriteLine(Pow(17, 13));
}
public static long Pow(int num, int pow)
{
long answer = 1;
for (int i = 0; i < pow; i++)
{
answer *= num;
}
return answer;
}
В результате из приведенной выше коды:
9904578032905936
9904578032905937
Есть ли встроенный в .NET альтернатив для использования мощности ряда без ошибок?
Вы видите ошибки округления. Используйте 'Math.Round()', если вы ожидаете целочисленный результат. – DrKoch