四种舍入方向:
向最接近的可表示的值;当有两个最接近的可表示的值时首选“偶数”值;向负无穷大(向下);向正无穷大(向上)以及向0(截断)。
说明:默认模式是最近舍入(Round to Nearest),它与四舍五入只有一点不同,对.5的舍入上,采用取偶数的方式。举例比较如下: 例2:
最近舍入模式:Round(0.5) = 0; Round(1.5) = 2; Round(2.5) = 2; 四舍五入模式:Round(0.5) = 1; Round(1.5) = 2; Round(2.5) = 3;
主要理由:由于字长有限,浮点数能够精确表示的数是有限的,因而也是离散的。在两个可以精确表示的相邻浮点数之间,必定存在无穷多实数是IEEE浮点数所无法精确表示的。如何用浮点数表示这些数,IEEE 754的方法是用距离该实数最近的浮点数来近似表示。至于中间值为什么取偶数而不是奇数,大师Knuth有一个例子说明偶数更好,于是一锤定音。
最近舍入模式在C/C++中没有相应的函数,当然,IEEE754以及x86 FPU的默认舍入模式是最近舍入,也就是每次浮点计算结果都采用最近舍入模式,除非用程序显式设置为其它三种舍入模式。 另外三种舍入模式,简要说明。
向0(截断)舍入:C/C++的类型转换。(int) 1.324 = 1,(int) -1.324 = -1;
向负无穷大(向下)舍入:C/C++函数floor()。例如:floor(1.324) = 1,floor(-1.324) = -2。
向正无穷大(向上)舍入:C/C++函数ceil()。ceil(1.324) = 2。Ceil(-1.324) = -1;后两种舍入方法据说是为了数值计算中的区间算法,但很少听说哪个商业软件使用区间算法。
本文详细介绍了四种浮点数舍入方向:向最接近的可表示数值、偶数原则、向负无穷大(向下)及向正无穷大(向上)。通过比较不同舍入模式在实际应用中的差异,解释了IEEE754标准下舍入过程的原理,并讨论了向0(截断)舍入方式。最后,阐述了每种舍入方法在C/C++语言中的实现方式。
4681

被折叠的 条评论
为什么被折叠?



