3.1 Oracle Solaris 数学库
本节介绍了与 Oracle Solaris 10 OS 捆绑在一起的数学库。这些库是作为共享对象文件提供的,安装在 Oracle Solaris 库的标准位置。
3.1.1 标准数学库
Oracle Solaris 标准数学库 libm 中包含基本数学函数以及 Oracle Solaris 操作环境所符合的各种标准所需的支持例程。
Oracle Solaris 10 OS 包括两种版本的 libm:libm.so.1 和 libm.so.2。libm.so.1 提供 Oracle Solaris 9 OS 及早期版本支持的标准所需的函数。libm.so.2 提供 Oracle Solaris 10 OS(包括 C99)支持的标准所需的函数。libm.so.1 用于提供向后兼容性,以保证在 Oracle Solaris 9 OS 及早期系统上编译和链接的程序不做改动即可继续运行。libm.so.1 中的内容在这些系统的 3M 手册页部分进行了说明。本章的剩余部分介绍了 libm.so.2。有关动态链接以及确定在运行程序时加载哪些共享对象文件的选项和环境变量的更多信息,请参见 ld(1) 和编译器手册页。
表 14列出了 libm 中的函数。 对于每个数学函数,表中只给出了函数的双精度版本名称。库中还包含函数的一个单精度版本,采用了相同的名称,后跟一个 f;以及一个扩展精度/四倍精度版本,也采用了相同的名称,后跟一个 l。
表 14 libm 的内容
|
|
代数函数 |
cbrt、fdim、fma、fmax、fmin、hypot、sqrt |
初等超越函数 |
asin、acos、atan、atan2、asinh、acosh、atanh、exp、exp2、expm1、pow、log、log1p、log10、log2、sin、cos、
sincos、tan、sinh、cosh、tanh |
高等超越函数 |
j0、j1、jn、y0、y1、yn、erf、erfc、gamma、lgamma、gamma_r、
lgamma_r、tgamma |
取整函数 |
ceil、floor、llrint、llround、lrint、lround、modf、nearbyint、
rint、round、trunc |
IEEE 标准推荐的函数 |
copysign、fmod、ilogb、nextafter、remainder、scalbn、fabs |
IEEE 分类函数 |
isnan |
旧式浮点函数 |
frexp、ldexp、logb、scalb、significand |
错误处理例程(用户定义) |
matherr |
复数函数 |
cabs、cacos、cacosh、carg、casin、casinh、catan、catanh、ccos、
ccosh、cexp、cimag、clog、conj、cpow、cproj、creal、
csin、csinh、csqrt、ctan、ctanh |
C99 浮点环境函数 |
feclearexcept、fegetenv、fegetexceptflag、fegetprec、fegetround、
feholdexcept、feraiseexcept、fesetenv、fesetexceptflag、
fesetprec、fesetround、fetestexcept、feupdateenv |
浮点异常处理函数 |
fex_getexcepthandler、fex_get_handling、fex_get_log、
fex_get_log_depth、fex_log_entry、fex_merge_flags、
fex_setexcepthandler、fex_set_handling、fex_set_log、
fex_set_log_depth |
其他 C99 函数 |
nan、nexttoward、remquo、scalbln |
|
请注意下面关于表 14的内容:
1. 函数 gamma_r 和 lgamma_r 是 gamma 和 lgamma 的可重入版本。
2. 函数 fegetprec 和 fesetprec 只能在 x86 系统上使用。这些函数并非 C99 标准所规定的函数。
3. libm 中的超越函数的误差界限和观察误差在 libm(3LIB) 手册页中均以表格形式列出。
3.1.2 向量数学库
库 libmvec 提供了用于计算整个参数向量的常用数学函数的例程。应用程序可以显式调用 libmvec 中的例程,使用 –xvector 标志时,编译器也会调用这些例程。
libmvec 是作为一种主共享对象文件 libmvec.so.1 以及多种辅助共享对象文件(提供部分或全部向量函数的替代版本)实现的。运行使用 libmvec 链接的程序时,运行时链接程序自动选择可在主机平台上提供最佳性能的版本。因此,使用 libmvec 中的函数的程序在不同系统上运行时,产生的结果可能略有不同。
表 15列出了 libmvec 中的函数。
表 15 libmvec 的内容
|
|
代数函数 |
vhypot_、vhypotf_、vrhypot_、vrhypotf_、vrsqrt_、vrsqrtf_、vsqrt_、vsqrtf_ |
指数及相关函数 |
vexp_、vexpf_、vlog_、vlogf_、vpow_、vpowf_ |
三角函数 |
vatan_、vatanf_、vatan2_、vatan2f_、vcos_、vcosf_、vsin_、vsinf_、vsincos_、
vsincosf_ |
复数函数 |
vc_abs_、vc_exp_、vc_log_、vc_pow_、vz_abs_、vz_exp_、vz_log_、vz_pow_ |
|