Oracle® Solaris Studio 12.4:数值计算指南

退出打印视图

更新时间: 2015 年 1 月
 
 

5.5.1 超越函数

大部分常用数学库函数(例如指数、对数和三角函数)按编程语言进行标准化,相比合理运算或者代数函数(例如平方根 sqrt()),正确舍入的成本非常高昂。接近正确的舍入函数适用于大多数用途,并且速度要快得多。但是,最快的接近正确舍入函数在不同的平台上也不同。

  • 对于由应用程序使用的函数,请使用可移植代码。此类代码的一个来源是免费分发的数学库 fdlibm。这个库可从 Netlib 软件系统信息库获取。

  • 避免使用 –xvector 选项。超越函数的向量化版本针对特定平台进行了优化,在不同平台上会得出略微不同的结果。

  • 避免使用 x86 硬件超越指令。即使这些指令具有小得不能再小的误差界限,也很可能无法正确舍入。此外,即使 Intel 和 AMD 的效果都非常好,但这两个版本偶尔会不同。借助 Oracle Solaris Studio C/C++ 编译器,可以使用 –xbuiltin=%default(特别是在 –fast 之后)来确保编译器不会使用内置超越函数来内联取代任何超越指令。与此类似,–fast 之后的 –xnolibmil 选项禁用内联模板;Oracle Solaris Studio 中的 libm.il 可能会有一些调用超越指令的模板。