本文目录
float数据类型 的范围:约为6位有效数字怎么算的
C语言中,float占4个字节,即32位。二进制的方式存储,首位是符号,所以范围可以算出来,2的31次方正负。正值还要减1,因为从0开始算的。具体在输出中,一般情况小数点以后默认6位。其它的高级语言算法也是一样,至于为什么是默认6位,这个可以找源代码来修改,不建议修改。
如何求出计算机中单精度浮点数的表数范围(具体过程)
不用求了,网上有的:
单精度数的尾数用23位存储,加上默认的小数点前的1位1,2^(23+1) = 16777216。
因为 10^7 《 16777216 《 10^8,所以说单精度浮点数的有效位数是7位。
双精度的尾数用52位存储,2^(52+1) = 9007199254740992,
因为10^16 《 9007199254740992 《 10^17,所以双精度的有效位数是16位。
扩展资料:
“浮点数的精度取决于尾数部分。尾数部分的位数越多,能够表示的有效数字越多。”这句赞同,所以双精度的有效位数肯定比单精度的多。
一个数如果有效位数大于7位 如1.27893456076(12位),用float来表示就不能准确的存储了。
运行:
float a = 1.23456789076f;// ---》a = 1.2345679
即用1.23456789076在计算机中存储成float的格式只能逼近到第七位,
能不能准确存储还取决于这个数字(十进制数)能不能用有限的二进制位数准确的表示。 float = 2.202 float = 2.25
如果小数部分转化为二进制时候得到一个无穷值,则会根据尾数部门的长度舍弃多余的部分,从而存储一个近似的浮点值,这就解释了 为什么在比较浮点数值时候 要做一个区间比较 而不是 等值比较。
溢出处理
浮点数的溢出是以其阶码溢出表现出来的。在加\减运算过程中要检查是否产生了溢出:若阶码正常,加(减)运算正常结束;若阶码溢出,则要进行相应处理。另外对尾数的溢出也需要处理。
阶码上溢 超过了阶码可能表示的最大值的正指数值,一般将其认为是+∞和-∞。
阶码下溢 超过了阶码可能表示的最小值的负指数值,一般将其认为是0。
尾数上溢 两个同符号尾数相加产生了最高位向上的进位,将尾数右移,阶码增1来重新对齐。
尾数下溢 在将尾数右移时,尾数的最低有效位从尾数域右端流出,要进行舍入处理。