3

我在 OS Xi686-apple-darwin11-llvm-gcc-4.2 (GCC) 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2336.11.00)和 Windows 7 上使用gcc (tdm64-1) 4.6.1.

为什么以下代码会在两个系统上生成不同的输出:

double d = 2.71828152557319224769116772222332656383514404296875;
printf("%1.55f\n", d);

OS X 输出是2.7182815255731922476911677222233265638351440429687500000

Win7输出是2.7182815255731922000000000000000000000000000000000000000

sizeof(double) == 8在两个系统上。

4

1 回答 1

4

C 标准不要求printf打印实际值,只要求它正确到一定数量的位置并满足一定的舍入方向误差约束。大多数类 unix 操作系统打印精确值,或者如果没有足够的位置来打印精确值,则将值正确四舍五入到请求的位置数。MSVCRT 四舍五入到固定数量的位置并用零填充其余位置。两种行为都符合,但后者确实丑陋且质量低下。

于 2012-11-21T05:09:09.650 回答