在constexpr: Introduction中,演讲者提到“编译时浮点计算可能与运行时计算的结果不同”:
原因与“交叉编译”有关。
老实说,我不太明白这个意思。IMHO,不同的平台也可能有不同的整数实现。
为什么它只影响浮点数?还是我错过了什么?
发布于 2018-06-21 20:51:19
您完全正确,在某种程度上,在编译时计算浮点值的问题与计算整数值的问题是相同的。区别在于任务的复杂性。在具有16位寄存器的系统上模拟24位整数数学是相当容易的;对于认真的程序员来说,这是一项简单的练习。如果你没有本机实现,那么做浮点数学就会困难得多。不需要浮点常量their的决定在一定程度上是基于这种差异:要求交叉编译器在编译时为其目标平台模拟浮点数学将非常昂贵。
另一个因素是可以在运行时设置浮点计算的一些细节。四舍五入是一种;上溢和下溢的处理是另一种。编译器根本不可能知道浮点计算的运行时计算的完整上下文,因此在编译时计算结果是不可靠的。
https://stackoverflow.com/questions/50959021
复制相似问题