在Mac OS X上libmath的$ fenv_access_off功能是什么?

时间:2012-10-27 00:30:59

标签: macos

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

$fenv_access_off是什么意思?

我明白我不会直接打电话给任何人,但我仍然对他们感到好奇。

2 个答案:

答案 0 :(得分:4)

Apple的一些工程师之间有一个mailing list thread,其中包含有关fenv_access_off的讨论。 Apple工程师Stephen Canon解释道:

  

C99知道您是在查看IEEE标志/更改舍入   模式与否取决于您是否已包含fenv.h并已完成   #pragma STDC FENV_ACCESS是否符合标准要求。 原则上,我们实际上可以有两个并行的数学库,一个   花时间努力设置旗帜并防御   舍入模式更改,更快的更改。在实践中,   这可以通过使用一组单独的符号来实现   用$ fenv_access_off为数学库中的所有东西装饰

来自man page的{​​{1}}:

  

标头声明要提供的类型,宏和函数   访问由任何组成的浮点环境   浮点状态标志和控制模式   实施

     

...

     

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

答案 1 :(得分:1)

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

现在,在OS X计算机上执行man fenv。手册页的日期是2011年5月9日。我猜它是OS X Lion引入的。 (但我不能确认,因为我只有Mountain Lion机器。)