我们知道编译器在优化我们的代码并使其运行得更快方面越来越好,但我的问题是有编译器可以优化浮点运算以确保更高的准确性。
例如,一个基本规则是在加法之前执行乘法,这是因为使用浮点数的乘法和除法不会像加法和减法那样引入误差,但会增加加法和减法引入的误差幅度,所以它应该很多情况下要先做。
所以像这样的浮点运算
y = x*(a + b); // faster but less accurate
应改为
y = x*a + x*b; // slower but more accurate
有没有编译器会像我上面展示的那样以牺牲速度为代价来优化浮点精度?还是编译器速度的主要关注点是不考虑浮点运算的准确性?
谢谢
更新:所选答案显示了一个非常好的示例,其中这种优化不起作用,因此编译器不可能事先知道评估 y 的更准确方法是什么。感谢您的反例。