【发布时间】:2012-07-10 23:01:15
【问题描述】:
我正在使用带有 MinGW/GCC 4.7.1 的 Windows 7。我试图在 C 中执行double ans = pow(2,1000)。我发现ans 无法正确打印,无论我在改变数据类型方面做了什么尝试。
但是,我读到(实际上,在this 页面的最底部),如果在 Linux 计算机上运行相同的东西,它会正确打印。
我知道我的 MinGW 文件夹中的 limits.h 文件中对 char、int 和 long long 施加的限制,但是 double 和 float 的限制在哪里?这些是否/可以从一个操作系统或架构到下一个有所不同?
编辑:
这是代码,它会打印出截断的零填充答案:
#include <stdio.h>
#include <math.h>
int main(void)
{
double ans = pow(2,1000);
printf("%.0f", ans);
return 0;
}
【问题讨论】:
-
您的号码可能在
double中准确表示,只是打印程序很糟糕。 -
这可能值得另一个问题,但也许可以在这里轻松回答:我将如何解决失败的打印例程? @tomasz
-
请显示一些实际代码。您的问题可能与字体大小有关,也可能无关。例如,如果您在
printf()调用中使用了错误的格式说明符,那么您将得到错误的结果。 -
你的源文件顶部有
#include <math.h>吗?如果不是,编译器可能会假设pow返回一个int结果并接受两个int参数(您还应该得到一个编译器警告)。 -
15-16 个正确显示的数字几乎是您所期望的;这通常是
double给你的精度类型。您没有问题,您只是在不同的printf实现如何处理 insignificant 数字方面遇到了细微的变化。 (如果你一开始就告诉我们,通过向我们展示你的程序产生的确切输出,你可以为我们所有人节省一些时间和精力。)