转载来源: https://blog.csdn.net/Tian MD _ Eric/article/details/79729827? UTM _ medium=distribute.PC _ relevant.none-task-blog-blogcommendfrombaidu-2 depth _1- UTM _ source=distried
作为参考,https://blog.csdn.net/m0 _ 37556444/article/details/86472306? UTM _ medium=distribute.PC _ relevant.none-task-blog-blogcommendfrombaidu-3 depth _1- UTM _ source=distried
要了解浮点和双精度的可能值范围和计算精度,首先需要了解小数是如何存储在计算机上的。
举个例子,78.375是正小数。 要将此数量存储在计算机中,必须将其表示为浮点数的形式。 首先执行二进制转换。
小数的二进制转换(浮点数) ) )。
78.375的整数部分:
小数部分:
因此,78.375的二进制格式为1001110.011
然后,使用二进制科学计数法,在某个
请注意,转换后用二进制科学表示法表示的这个数在有底有指数中有小数部分,称为浮点数
2浮点数存储在计算机中
在计算机上,浮点表示用于存储这个数,分为三大部分。
第一部分用于存储符号位sign,该符号位用于区分正负数,这里为0,正数
第二部分用于存储“指数”。 这里的指数是十进制的六
第三部分用于存储小数。 这里的小数部分是001110011
需要注意的是,指数也有正负,以后再说。
如下图所示(照片来自维基百科) :
例如,float类型为32位,是单精度浮点表示。
符号位(sign )占用一个位来表示正负数,
指数(exponent )占表示指数的8位,
小数点后的位数(fraction )占用23位来表示小数点后的位数,不足位数则补充0。
双精度型为64位,是双精度浮点表示。
符号占1位,指数占11位,小数点占52位。
到此为止,其实已经隐隐约约地知道了:
指数位数决定大小的范围。 因为指数位能表示的数量越大,能表示的数量就越大。
小数点后的位数决定了计算的精度。 因为小数点后的位数越大,计算的精度就越高。
你可能还不知道,举个例子吧:
float的小数位数是23位,即二进制的23位,可以表示的最大十进制是2的23次方,即8388608,即十进制的7位,严格地说,精度只能保证十进制的6位运算。
双精度小数位数为52位,与十进制对应的最大值为4 503 599 627 370 496,该数为16位,因此计算精度只能100%保证十进制的15位运算。
作者:老板出生了
链接: https://www.zhi Hu.com/question/46432979/answer/221485161
来源:知乎
版权归作者所有。 商业转载请联系作者取得许可。 非商业转载请注明出处。
3指数位偏移和无符号显示
必须注意的是,指数可能为负,也可能为正。 也就是说,指数是有符号整数,有符号整数的计算比无符号整数更麻烦。 因此,为了减少不必要的工作量,在实际存储指数时,需要将指数变换为无符号整数。 那么怎么转换?
请注意,如果浮点指数部分为8位,则指数的取值范围为-126到127。 为了消除负数的实际计算影响(例如,大小比较、加减等),可以在实际保存时对指数进行简单映射,并添加偏移,使float的指数偏移为127。
例如
指数为6时,实际存储6 127=133。 也就是说,将133转换为二进制文件并存储。
如果指数为-3,则实际存储-3 127=124。 也就是说,将124转换为二进制后再存储。
需要计算实际代表的十进制数时,请从指数中减去偏移量。
的双精度类型,保存时的指数偏移为1023。
四最后
因此,要将十进制小数78.375存储为浮点型,需要将其转换为浮点型以获得编码位、指数和小数部分。 这个例子已经分析过了,所以:
符号位为0,
指数为6 127=133,表示二进制为10,000,101。
小数部分为001110011,不足部分请自动补充0。
合并用浮点表示,粗体部分用指数位表示,左端用符号位0表示正数。
0 10000101 001110011 00000 00000 0000
如果用双精度保存。 自己计算吧。 0太多了。
作者:老板出生了
链接: https://www.zhi Hu.com/question/46432979/answer/221485161