3.2 Oracle Developer Studio 数学库
本节介绍了 Oracle Developer Studio 编译器所包含的数学库。
Oracle Developer Studio 12.5 的缺省基安装目录在 Oracle Solaris 上是 /opt/developerstudio12.5,在 Linux 上是 /opt/oracle/developerstudio12.5。但是,在安装过程中可以指定不同的基安装目录 install-dir。
缺省情况下,在目录 install-dir/lib/compilers 及其子目录中安装 Oracle Developer Studio 静态 32 位库。在 install-dir/lib/compilers/sparcv9 中(在 SPARC 上)和 install-dir/lib/compilers/amd64 中(在 x86 上)安装静态 64 位库。
本数值计算指南还介绍了共享 libm 和 libmvec 库,这些库仅可用于 Oracle Solaris,安装在 /usr/lib(对于 32 位版本)和 /usr/lib/64(对于 64 位版本)中。
对于 Oracle Solaris,math.h 和 sunmath.h 库头文件安装在 /usr/include 中。对于 Linux,math.h 库头文件安装在 install-dir/lib/compilers/include/cc 中。
静态归档文件、共享对象和包含文件的 Oracle Developer Studio install-dir 的 subdirectories 在不同发行版中会有所变化。
3.2.1 Oracle 数学库
libsunmath 数学库中包含未被任何标准指定但在数值软件中很实用的函数。它还包含 libm.so.2 中提供但 libm.so.1 中未提供的许多函数。libsunmath 同时作为共享对象文件和静态归档文件进行提供。
表 16列出了 libsunmath 中提供,而 libm.so.2 中未提供的函数。 对于每个数学函数,表中只给出函数从 C 程序中调用时所使用的双精度版本的名称。
表 16 libsunmath 的内容
|
|
初等超越函数
|
exp10
|
以度为单位的三角函数
|
asind、acosd、atand、atan2d、sind、cosd、sincosd、tand
|
按 ?? 缩放的三角函数
|
asinpi、acospi、atanpi、atan2pi、sinpi、cospi、sincospi、tanpi
|
使用双精度 ?? 参数约简的三角函数
|
asinp、acosp、atanp,sinp、cosp、sincosp、tanp
|
财务函数
|
annuity、compound
|
取整函数
|
aint、anint、irint、nint
|
IEEE 标准推荐的函数
|
signbit
|
IEEE 分类函数
|
fp_class、isinf、isnormal、issubnormal、iszero
|
提供有用 IEEE 值的函数
|
min_subnormal、max_subnormal、min_normal、max_normal、infinity、
signaling_nan、quiet_nan
|
加法的随机数生成器
|
i_addran_、i_addrans_、i_init_addrans_、i_get_addrans_、i_set_addrans_、
r_addran_、r_addrans_、r_init_addrans_、r_get_addrans_、r_set_addrans_、
d_addran_、d_addrans_、d_init_addrans_、d_get_addrans_、d_set_addrans_、
u_addrans_
|
线性同余随机数生成器
|
i_lcran_、i_lcrans_、i_init_lcrans_、i_get_lcrans_、i_set_lcrans_、
r_lcran_、r_lcrans_、d_lcran_、d_lcrans_、u_lcrans_
|
进位相乘的随机数生成器
|
i_mwcran_、i_mwcrans_、i_init_mwcrans_、i_get_mwcrans_、i_set_mwcrans、
i_lmwcran_、i_lmwcrans_、i_llmwcran_、i_llmwcrans_、u_mwcran_、
u_mwcrans_、u_lmwcran_、u_lmwcrans、u_llmwcran_、u_llmwcrans_、
r_mwcran_、r_mwcrans_、d_mwcran_、d_mwcrans_、smwcran_
|
随机数置乱器
|
i_shufrans_、r_shufrans_、d_shufrans_、u_shufrans_
|
数据转换
|
convert_external
|
控制舍入模式和浮点异常标志
|
ieee_flags
|
浮点陷阱处理
|
ieee_handler、sigfpe
|
显示状态
|
ieee_retrospective
|
启用/禁用非标准的算法
|
standard_arithmetic、nonstandard_arithmetic
|
|
3.2.2 优化库
libmopt 库提供了 libm 和 libsunmath 中一些函数的更快版本。libmopt 仅作为静态归档文件提供。libmopt 中包含的例程替代了 libm 中的相应例程。通常,libmopt 版本的速度明显更快。与 libm 版本(支持任何 ANSI/POSIX®、SVID、X/Open 或 C99/IEEE 样式的异常情况处理方式)不同,libmopt 例程仅支持 C99/IEEE 样式的异常情况处理方式。(请参见标准符合性。)另外,无论采用何种浮点舍入方向模式,libm 中的所有数学函数均可提供相当准确的结果,而未定义调用 libmopt 中带有舍入方向而非舍入为最接近的函数的结果。无论何时调用标准数学函数,使用 libmopt 的程序必须确保缺省的舍入为最接近模式生效。要使用 libmopt 链接程序,请使用 –xlibmopt 标志。