Округление поведения Math.Log - PullRequest
       13

Округление поведения Math.Log

0 голосов
/ 14 октября 2019

Я пытаюсь определить, является ли целое число n степенью три. Мой подход состоит в том, чтобы взять из базы 3 log n и проверить, есть ли что-нибудь после десятичной точки результата:

int n = 243;
double result = Math.Log(n, 3);
Console.WriteLine(result);
if (result % 1 == 0)
{
    return true;
}

return false;

Вот вывод программы, когда я запускаю приведенный выше код:

5
False

Я попытался сделать это по-другому:

        double result = Math.Log(n, 3);
        Console.WriteLine(result);
        Console.WriteLine((int)result);
        double remainder = result - (int)result;
        Console.WriteLine(remainder);
        if (remainder == 0)
        {
            return true;
        }

        return false;

При n = 243 я получаю:

5
4
0.999999999999999
False

Обратите внимание, что с n=27 True возвращается, как ожидалось,Что тут происходит? Я ожидаю, что True будет возвращено, когда n нас 243.

...