浮点数标準( 四 )


浮点数标準

文章插图
并且尾数的小数部分是0 , 这个数是±∞(同样和符号位相关);如果指数 =
浮点数标準

文章插图
并且尾数的小数部分非0 , 这个数表示为不是一个数(NaN) 。浮点数的比较浮点数基本上可以按照符号位、指数域、尾数域的顺序作字典比较 。显然 , 所有正数大于负数;正负号相同时 , 指数的二进制表示法更大的其浮点数值更大 。浮点数的捨入任何有效数上的运算结果 , 通常都存放在较长的暂存器中 , 当结果被放回浮点格式时 , 必须将多出来的比特丢弃 。有多种方法可以用来运行捨入作业 , 实际上IEEE标準列出4种不同的方法:捨入到最接近:捨入到最接近 , 在一样接近的情况下偶数优先(Ties To Even , 这是默认的捨入方式):会将结果捨入为最接近且可以表示的值 , 但是当存在两个数一样接近的时候 , 则取其中的偶数(在二进制中式以0结尾的) 。朝+∞方向捨入:会将结果朝正无限大的方向捨入 。朝-∞方向捨入:会将结果朝负无限大的方向捨入 。朝0方向捨入:会将结果朝0的方向捨入 。浮点数的运算与函式下述函式必须提供:加减乘除(Add、subtract、multiply、divide) 。在加减运算中负零与零相等:
浮点数标準

文章插图
平方根(Square root):
浮点数标準

文章插图
 , 另规定
浮点数标準

文章插图
浮点余数 。返回值
浮点数标準

文章插图
。近似到最近的整数 {\displaystyle round(x)} 。如果恰好在两个相邻整数之间 , 则近似到偶数 。比较运算. -Inf <负的规约浮点数数<负的非规约浮点数< -0.0 = 0.0 <正的非规约浮点数<正的规约浮点数< Inf;特殊比较: -Inf = -Inf, Inf = Inf, NaN与任何浮点数(包括自身)的比较结果都为假 , 即 (NaN ≠ x) = false. 建议的函式与谓词copysign(x, y): copysign(x, y)返回的值由x的不带符号的部分和y的符号组成 。因此abs(x)等于copysign(x, 1.0) 。copysign可以对NaN正确操作 , 这是少有的几个可以对NaN像普通算术一样操作有效的函式之一 。C99新增了copysign函式 。?x:从涵义上指将x的符号反转 。当x是±0或者NaN时 , 其涵义可能不同于0-x.scalb(y, N):计算y×2N(N是整数) , 无需再计算2N 。C99中对应的函式名是scalbn.logb(x):计算x = 1.a×2n(x ≠ 0, a ∈[0, 1))中的n. C99新增了logb和ilogb函式 。nextafter(x,y):沿y方向找最邻近x的可表达浮点数 。比如nextafter(0, 1)得到的是最小可表达的正数 。C99新增了nextafter函式 。finite(x):判断x是否有限 , 即?Inf < x < Inf. C99新增了isfinite函式 。isnan(x):判断x是否是一个NaN , 这等价于"x ≠ x". C99新增了isnan函式 。x <> y:仅当x < y或者x > y时才为True , 其涵义是NOT(x = y) 。注意这不同于"x ≠ y" 。unordered(x, y):当x与y无法比较大小时为True , 比如说x或者y是一个NaN. C99中对应的函式名是isunordered.class(x):区分x的浮点数类属:信号NaN、静默NaN、-Inf、负的规约浮点数 , 负的非规约浮点数 , -0.0,0.0 , 正的非规约浮点数 , 正的规约浮点数 , Inf 。