【发布时间】:2012-06-10 17:00:08
【问题描述】:
#include <stdio.h>
#include <float.h>
int main()
{
printf("%f\n", FLT_MAX);
}
来自 GNU 的输出:
340282346638528859811704183484516925440.000000
Visual Studio 的输出:
340282346638528860000000000000000000000.000000
C 和 C++ 标准是否允许这两种结果?还是他们要求特定的结果?
注意FLT_MAX = 2^128-2^104 = 340282346638528859811704183484516925440。
【问题讨论】:
-
C 和 C++ 标准甚至不强制要求特定的浮点表示。所以我倾向于认为他们不能强制要求特定的结果。
-
@Mysticial 好吧,他们可能仍然普遍要求“必须打印出所代表的确切值”或类似的东西。
-
而 Unix pwns Windows。再一次。
-
@H2CO3,您如何得出 GNU 优于 Windows 的结论?我更喜欢微软的结果,因为它正确地暗示了分辨率是有限的。
-
查看我的两篇文章 exploringbinary.com/… 和 exploringbinary.com/… 。您将看到位数如何因语言和实现而异。
标签: c++ c floating-point standards printf