Что здесь происходит:
#include <stdio.h>
#include <math.h>
int main(void) {
printf("17^12 = %lf\n", pow(17, 12));
printf("17^13 = %lf\n", pow(17, 13));
printf("17^14 = %lf\n", pow(17, 14));
}
Я получаю этот вывод:
17^12 = 582622237229761.000000
17^13 = 9904578032905936.000000
17^14 = 168377826559400928.000000
13 и 14 не соответствуют wolfram alpa cf:
12: 582622237229761.000000
582622237229761
13: 9904578032905936.000000
9904578032905937
14: 168377826559400928.000000
168377826559400929
Кроме того, он не ошибается какой-то странной фракцией - он ошибочен ровно одним!
Если это до меня доходит до предела того, что pow()
может сделать для меня, есть ли альтернатива, которая может рассчитать это? Мне нужна функция, которая может вычислять x^y
, где x^y
всегда меньше ULLONG_MAX.