2 yxpandjay yxpandjay 于 2017.09.11 14:51 提问

请问C语言中浮点数的舍入规则是什么?

图片说明

初学C语言,不太明白内置的舍入规则到底是怎样的。为什么3.25和3.35都舍入到3.3了。

(PS:我不是想四舍五入TOT 我知道+0.05就可以了。我想知道的是float默认的舍入规则是什么。。)

2个回答

kingslave1
kingslave1   2017.09.11 16:12
已采纳

C语言中float,double等类型,在内存中的结构
float在内存中的存储方式比较复杂,不能简单地理解为四舍五入或者向上取整或向下取整

swordsmansnow
swordsmansnow   2017.09.11 16:11

"四舍六入五成双",也即"4舍6入5凑偶"这里"四"是指≤4 时舍去,"六"是指≥6时进上,"五"指的是根据5后面的数字来定,当5后有数时,舍5入1;当5后无有效数字时,需要分两种情况来讲:①5前为奇数,舍5入1;②5前为偶数,舍5不进。(0是偶数)
具体规则如下:  1.小于5舍去,即舍去部分的数值小于保留部分的末位的半个单位,则末位不变;   2.大于5进1,即舍去部分的数值大于保留部分的末位的半个单位,则末位加1;   3.等于5时取偶数,即舍去部分的数值,等于保留部分的末位的半个单位,则   末位凑成偶数,即当末位为偶数时,末位不变;当末位为奇数时,末位加1.  举例,用上述规则对下列数据保留3位有效数字:  9.8249=9.82,9.82671=9.83   9.8251=9.83,9.8350 =9.84   9.8250=9.82,9.82501=9.83
按以上规则来看的话,你的输出结果应该是 3.2,3.2,3.4,3.4.3.6然而并不是。
具体原因不明。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
C语言中浮点数向零舍入取整的方法
碰到一道题。
浮点数舍入规则
上课的时候迷糊了,这一点没有好好听。写在这里主要是防止别人忘记吧。 浮点数舍入要舍入到第i位的时候,第i+1,i+2位全为1,则第i位++,以后统统变成0。否则都是直接清空,第i位不变。
浮点数的舍入问题
《计算机硬件技术基础》第2章39页表2-5舍入控制中的就近舍入(偶)这个问题,对它不太明白,不知道什么意思。请您讲解一下,并且请您举个例子。 解答:  表的下面有一段文字进行了解释:  例如有效数字超出规定数位的多余数字是1001,它大于超出规定最低位的一半(即0.5),故最低位进1。如果多余数字是0111,它小于最低位的一半,则舍掉多余数字(截断尾数、截尾)即可。对于多余数字是1000
浮点数运算中的舍入问题
前面讲到了浮点数计算时候的步骤:对阶,尾数求和,规格化。没有细细研究舍入的问题。需要提出的是,阶码是小的向大的看齐,因此尾数求和阶段只有右移,没有左移。在规格化阶段,尾数超过加和溢出,需要右移。高位不是1的时候就左移。 左移,阶码要-1,右移,阶码要+1. 我以为自己懂了,但是真的遇到问题,才发现有一处不明,导致全盘皆不明。书上提供了两种舍入的方法,一种是0舍1入法,一种是恒置1法。具体解释是这
浮点数向偶数舍入的问题
例如有效数字超出规定数位的多余数字是1001,它大于超出规定最低位的一半(即0.5),故最低位进1。如果多余数字是0111,它小于最低位的一半,则舍掉多余数字(截断尾数、截尾)即可。对于多余数字是1000、正好是最低位一半的特殊情况,最低位为0则舍掉多余位,最低位为1则进位1、使得最低位仍为0(偶数)。  注意这里说明的数位都是指二进制数。  举例:要求保留小数点后3位。  对于
C语言中双精度浮点型什么意思
双精度型占8 个字节(64位)内存空间 其数值范围为3.4E-38~3.4E+38 double(双精度说明符) 单精度型占4个字节(32位)内存空间 float(单精度说明符) 其数值范围为1.7E-308~1.7E+308 只能提供七位有效数字 可提供16位有效数字
IEEE 754 浮点数的四种舍入方式
四种舍入方向: 向最接近的可表示的值;当有两个最接近的可表示的值时首选“偶数”值;向负无穷大(向下);向正无穷大(向上)以及向0(截断)。 说明:舍入模式也是比较容易引起误解的地方之一。我们最熟悉的是四舍五入模式,但是,IEEE 754标准根本不支持,它的默认模式是最近舍入(Round to Nearest),它与四舍五入只有一点不同,对.5的舍入上,采用取偶数的方式。举例比较如下: 例2
C语言中浮点数的运算
C语言中,在进行相应的乘除运算时: 只要其中一个为浮点数,那么最后得到的结果一定是一个带小数点的浮点数! 如:3.0*6=18.0      48/3.0=16.0
十进制浮点数转IEEE754浮点数
十进制浮点数转IEEE754浮点数,利用C语言中的union
C语言中的浮点数比较
浮点数分为单精度和双精度两种。在内存中的存储方式按照IEEE754标准。通常情况下,单精度占4个字节,双精度占8个字节。可以使用sizeof验证一下。 #include int main() { float x=0.1;//单精度 double y=0.1;//双精度 printf("%d %d\n",sizeof(x),sizeof(y)); } 输出结果为4 8;