为什么 -freciprocal-math 在 GCC 中不安全?

问题描述 投票:0回答:2
GCC 中的

-freciprocal-math
更改了以下代码

double a = b / c;

 double tmp = 1/c;
 double a = b * tmp;

在GCC手册中,据说这样的优化是不安全的,并且不遵守IEEE标准。但我想不出一个例子。你能举个例子吗?

c math gcc optimization precision
2个回答
18
投票

除以 10 和乘以 0.1000000000000000055511151231257827021181583404541015625 不是一回事。


0
投票

也许我正在考虑不同的编译器标志,但是......

一些处理器有计算近似倒数的指令。 我想到了 x86(SIMD 指令)的 RCPSS;它的相对误差为 1.5 ∗ 2^−12。 使用该标志可能允许编译器选择近似相反的指令,这可能不是一个安全的事情,具体取决于您的应用程序。

希望这有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.