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

constexpr: Introduction中,发言者提到“编译时浮点计算可能与运行时计算的结果不同”:
enter image description here

原因与“交叉编译”有关.

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

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

最佳答案
你是绝对正确的,在某种程度上,在编译时计算浮点值的问题与计算整数值的问题是一样的.不同之处在于任务的复杂性.在具有16位寄存器的系统上模拟24位整数数学是相当容易的.对于认真的程序员来说,这是一个手指练习.如果你没有本机实现,那么做浮点数学要困难得多.不要求浮点constexpr的决定部分基于这种差异:要求交叉编译器在编译时为其目标平台模拟浮点数学将是非常昂贵的.

另一个因素是可以在运行时设置浮点计算的一些细节.舍入是一个;处理溢出和下溢是另一回事.编译器根本无法知道浮点计算的运行时评估的完整上下文,因此无法可靠地在编译时计算结果.

转载注明原文:c – 为什么编译时浮点计算可能与运行时计算的结果不同? - 代码日志