【发布时间】:2015-03-16 01:25:15
【问题描述】:
这段代码怎么能打印出这么大的数字?我已经在 Ubuntu 14.04 (gcc 4.8.2) 上试过了。 它在 MS Windows 上与任何编译器(甚至是 MinGW,称为“gcc for Windows”)都不相同。为什么?
#include <stdio.h>
#include <math.h>
int main()
{
printf("%.0f\n",pow(2,500));
}
Ubuntu 输出:
3273390607896141870013189696827599152216642046043064789483291368096133796404
674554883270092325904157150886684127560071009217256545885393053328527589376
Windows 输出:
3273390607896141900000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000
(为了清楚起见,添加了换行符。)
【问题讨论】:
-
也许 GCC 使用它的依赖项 MPFR 来将浮点表达式计算为任意精度,因为它是一个常数?
-
转换为某种特定类型,例如 (long double)pow(2,500),差异应该会消失
-
执行 printf("%.0lf\n",power(2,500));做点不一样的事?
标签: c linux windows gcc compilation