使用 -fast,编译器可以用不设置 errno 变量的等效优化代码自由替换对浮点函数的调用。 此外,-fast 还定义宏 __MATHERR_ERRNO_DONTCARE,请求编译器忽略错误,从而确保 errno 和所引发的浮点异常的有效性。因此,依赖于 errno 的值或者浮点函数调用之后的正确浮点异常的用户代码会产生不一致的结果。
解决此问题的一种方法是避免使用 -fast 编译此类代码。但是,如果需要 -fast 优化并且代码依赖于浮点库调用后正确设置的 errno 值,则应使用以下选项进行编译
-xbuiltin=none -U__MATHERR_ERRNO_DONTCARE -xnolibmopt -xnolibmil
这些选项在命令行上应跟在 -fast 之后,以禁止编译器优化此类库调用,并确保正确处理 errno。