Math.Pow принимает целочисленное значение

From http:// msdn.microsoft.com/en-us/library/system.math.pow.aspx

int value = 2;
for (int power = 0; power <= 32; power++)
    Console.WriteLine("{0}^{1} = {2:N0}",
                      value, power, (long) Math.Pow(value, power));

Math.Pow принимает двойные числа в качестве аргументов, а здесь мы передаем целые

Вопрос: существует ли какая-либо опасность с плавающей запятой ошибки округления, если происходит неявное преобразование в double?

Если да, то лучше использовать что-то вроде:

public static int IntPow(int x, uint pow)
{
    int ret = 1;
    while (pow != 0)
    {
        if ((pow & 1) == 1)
            ret *= x;
        x *= x;
        pow >>= 1;
    }
    return ret;
}

9
задан Deduplicator 8 March 2015 в 01:14
поделиться