Результат pow(3,20)
не может поместиться в int
на вашей платформе (или моей в этом отношении).Из-за этого вы испытываете неожиданные результаты.
Переключение на больший целочисленный тип, такой как long long
, сделает работу.
Более того, pow
работает с числами с плавающей запятой, которые не представлены точно в памяти (посмотрите, чтовверх).Во время преобразования в целое число, это может вызвать определенные ошибки.Например, для printf("%fl\n", (pow(3,20)));
я получаю 3486784401.000000l
, который не является точным целочисленным значением.