为什么编译时浮点计算可能与运行时计算的结果不同?

Nan*_*iao 5 c++ floating-point floating-accuracy language-lawyer constexpr

constexpr:Introduction中,发言者提到"编译时浮点计算可能与运行时计算的结果不同": 在此输入图像描述

原因与"交叉编译"有关.

老实说,我无法清楚地理解这个想法.恕我直言,不同的平台也可能有不同的整数实现.

为什么它只影响浮点数?或者我想念什么?

Jos*_* D. 2

\n

为什么它只影响浮点数?

\n
\n\n

因为该标准没有对浮点运算精度施加限制。

\n\n

根据expr.const强调我的

\n\n
\n

[\xe2\x80\x89注意:由于本文档对\n浮点运算的精度没有限制,因此未指定\n翻译期间浮点表达式的计算是否会产生与\n相同的结果\n程序执行期间相同的表达式(或对相同值的相同操作)。[\xe2\x80\x89示例:

\n\n
bool f() {\n    char array[1 + int(1 + 0.2 - 0.1 - 0.1)];  // Must be evaluated during translation\n    int size = 1 + int(1 + 0.2 - 0.1 - 0.1);   // May be evaluated at runtime\n    return sizeof(array) == size;\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

未指定f()will的值为truefalse。\n \xe2\x80\x94\xe2\x80\x89end example\xe2\x80\x89]
\n \xe2\x80\x94\xe2\x80\x89end note\xe2 \x80\x89]

\n
\n