这里发生了什么:
#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 Alpha不匹配,参见:
12: 582622237229761.000000
582622237229761
13: 9904578032905936.000000
9904578032905937
14: 168377826559400928.000000
168377826559400929
此外,它不是由于某种奇怪的分数而出错 - 它确切地仅出错了一个!
如果这是因为我已经达到了pow()
能为我做的限制,那么是否有替代方法可以计算这个呢?我需要一个函数来计算x^y
,其中x^y
始终小于ULLONG_MAX。
for (float f = 0; f < INT_MAX; f++) { }
- ntoskrnl%lf
中的l
是无效的。你正在打印double
,如果编译平台将double
映射到 IEEE 754 的双精度格式,则不会以这种方式打印9904578032905937.0
,因为不存在这样的双精度数字。 - Pascal Cuoqint
是16位的系统上,它确实会停止。 - MSalters