C++ 学习 ------cmath 头文件的源码学习 04
续接上文:https://xie.infoq.cn/article/d8a58a793a310bcc0f1c7f098
比较函数、绝对值函数、最值函数的定义与功能分析。
宏函数定义---比较函数
比较两数的关系,给出 bool 判断结果
复制代码
isgreater---返回 x 是否大于 y
isgreaterequal---返回 x 是否大于等于 y
isless---返回 x 是否小于 y
islessequal---返回 x 是否小于等于 y
islessgreater---返回 x 是否小于或者大于 y
isunordered---返回 x 和 y 是否不可排序(即判断 x,y 中是否有 Nan)
上面是这几个函数的解释,我们来看看 glibc 中非内建函数的解释:其中 isunordered 的判断是将两数相比较,如果其中有一个 Nan 那么两者一定不相等,同时判断两数自身和自身是否相等,Nan 数是没法做这个判断的,所以返回 true,这样就说明只要有一个数为 Nan,那么 isunordered 就会返回 true;
其它函数的判断中,也是结合了 isunordered 的结果的,只有可排序的数才能比较大小,所以如果有 Nan 数,那么之前的所有比较函数都会返回 false,这一点要注意。
复制代码
函数族定义---绝对值函数 fabs 与 abs
后续的函数都有三个类似的,对应 double 类型,float 类型,long double 类型,我们分析其中的 double 类型就好。
复制代码
后面 C++11 又增加了一个函数,通过函数重载,可以接受 int 型输入
复制代码
函数族定义---fma 乘加法,返回 x*y+z 的值
复制代码
函数族定义---fmax,返回两数中较大的那一个
复制代码
函数族定义---fmin,返回两数中较小的那一个
复制代码
函数族定义---fdim,如果 x>y,返回 x-y 的值,其它情况都返回 0
复制代码
版权声明: 本文为 InfoQ 作者【桑榆】的原创文章。
原文链接:【http://xie.infoq.cn/article/1106c64a99136089e21118543】。文章转载请联系作者。
评论