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

GCC中的-freciprocal-math更改以下代码

 double a = b / c; 

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

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

除以10并乘以0.1000000000000000055511151231257827021181583404541015625也不是一回事。

也许我在想一个不同的编译器标志,但……

某些处理器具有计算近似倒数的指令。 RCPSS om x86(SIMD指令)浮现在脑海中; 它有一个相对误差1.5 * 2 ^ -12。 使用该标志可能允许编译器选择一个近似的倒数指令,根据您的应用程序,这可能不安全。

希望这可以帮助。