有网友碰到这样的问题“c语言中一些混淆不清的地方”。小编为您整理了以下解决方案,希望对您有帮助:
解决方案1:
我给你一些参考吧,因为你本身思路比较乱。一楼的回答对此也不是很深入。
四舍五入对于计算机来说是十分关键的,在进行科学计算时有着至关重要的作用。
但是这是一个相当复杂的过程,需要相当多的支持部分,包括软件的和硬件的。
基本的舍入分成以下几种情况:
1、输入舍入:如果你输入1234567,那么float无法精确表示这个数,这产生了舍入,这个是四舍五入,由编译器负责。
2、类型转换:一般可由,double到float,int到float,float到int等产生,默认“四舍五入”---->二进制是0舍1入。(这个可以通过ceil,floor等控制一部分)
3、计算舍入:例如两个float数相乘,默认“四舍五入”---->二进制是0舍1入,但是可以人为控制。
4、输出舍入:由于计算机内部的表示是2进制,而人们喜欢看10进制,而二进制数往往不能精确的转换为10进制数,这个也会产生舍入。一般是printf负责,这个可能会有比较大的出入。
------------------------------------
特别注意的是,由于输入输出的舍入不一样,所以把输出当做输入,或者输入当做输出,可能得不到原数,这个是由于进制本身的原因决定的。
-------------------------------------
不懂再问吧:
对于实型数据来说,是任何时候输出的宽度都与数据的有效位数无关吗?
还是当规定输出数据的宽度的时候与有效位数无关,没规定宽度的时候与有效位数有关?
截尾和舍去小数部分是否都遵循四舍五入?
有不遵循四舍五入的时候吗?
这些应该大部分都是输出舍入的,这些计算相当复杂,应该说是四舍五入。
解决方案2:
其实你理解有偏差,因为你使用数学的眼光来看待这个问题了,不然,应当用逻辑思维来理解,还需要配合浮点数在内存中的存储方式。
假如你有时间的话 或者像理解的透彻一点的话你可以去网络上看一下浮点数在内存中是怎么表示的
先说明,社区的位并不遵循四舍五入,计算机没办法做的那么好,甚至有的编译器连你存得浮点数都有可能在内存中产生一定的偏差而导致你要存1的时候他存入了0.999999
这里的六位指的是总共的有效数字,比如12345678-----那么有效数字是六位的话就指的是前六位,对于各种编译器来说,存多少位有效数组不一定的,这个取决于便一去的实现,你可以到C++头文件里面去看,C++版本--cfloat C版本float.h
里面告诉你各种浮点类型的有效位多少,所占字节数多少和最大值最小值
不管有没有规定宽度,有效位的长度是一直存在的,不和你存得数组有关,之和你的编译器有关
Copyright © 2019- 99spj.com 版权所有 湘ICP备2022005869号-5
违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务