2

Mountain Lion 的 libmath 实现(位于 /usr/lib/system/libsystem_m.dylib)具有所有标准的 libmath 函数,并且每个函数都有一个$fenv_access_off变体。例如,有acosacos$fenv_access_off。(我没有安装任何其他版本的 Mac OS 来检查 10.8 之前的情况。)

是什么$fenv_access_off意思?

我知道我永远不会直接调用其中任何一个,但我仍然对它们感到好奇。

4

2 回答 2

4

Apple 的一些工程师之间有一个邮件列表线程,其中包含有关 fenv_access_off 的讨论。Apple 工程师 Stephen Canon 解释说:

C99 知道您是否正在查看 IEEE 标志/更改舍入模式,这取决于您是否按照标准要求包含 fenv.h 并打开 #pragma STDC FENV_ACCESS。所以原则上,我们实际上可以有两个并行的数学库,一个花时间努力设置标志和防御舍入模式的变化,一个更快的没有。在实践中,这可以通过为数学库中的所有内容设置一组单独的符号来实现,这些符号用 $fenv_access_off 装饰

来自:man page_fenv

头文件声明类型、宏和函数以提供对浮点环境的访问,包括任何浮点状态标志和实现支持的控制模式。

...

FENV_ACCESS pragma 提供了一种通知编译器程序可能访问浮点环境以测试状态标志或更改控制模式的方法。

于 2012-10-30T17:36:15.170 回答
1

这些符号变体具有$....向后兼容性,请阅读Symbol Variants Release Notes。这个特殊的,$fenv_access_off似乎是为了与新的 C 标准兼容而引入的。请参阅Open Group 网页上的fenv.h。

现在,man fenv在 OS X 机器上做。手册页的日期是 2011 年 5 月 9 日。我猜它是在 OS X Lion 中引入的。(但我无法确认,因为我只有山狮机器。)

于 2012-10-29T19:46:20.530 回答