Mountain Lion的libmath实现(位于/usr/lib/system/libsystem_m.dylib)具有所有标准的libmath函数,并且每个函数都有一个$fenv_access_off
变体。例如,有acos
和acos$fenv_access_off
。 (我没有安装任何其他版本的Mac OS来检查是否是10.8之前的情况。)
$fenv_access_off
是什么意思?
我明白我不会直接打电话给任何人,但我仍然对他们感到好奇。
答案 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机器。)