1.10进制浮点数的内存表示
举个例子:float类型的8.25在内存中的表示
第一步:转化为2进制表示 1000.01
第二步:转化为指数形式 1.00001 * 2^3
第三步:转化为float类型表示形式 (注意* float类型算指数位时需要将之前的指数位加127, double类型算指数位时需要将之前的指数位加1023)
符号位: 0
指数位: 127 + 3 = 130 = 1000 0010
尾数位:00001(剩下的补零)
所以算出的值转化为16进制数为0x41040000,这里我们用程序验证下
(在这里有我一个不懂的知识点,这里记录下。去看float的十六进制数,用的是unsigned int类型的指针,为什么不用float类型指针呢?因为%X,它表示的是显示十六进制数,08表示8位,只能用unsigned int类型如果用了其他类型会出现以下错误)
2.浮点数的精度问题
因为浮点数是符号位+指数位+尾数位表示的所以并不是一个连续的数例如:
虽然给的值是123456789但是实际是123456792
3.给一道笔试题
(不定项选择题)以下数字在表示为double(8字节的双精度浮点数)时存在舍入误差的有()
A. 2的平方根
B. 10的30次方
C. 0.1
D. 0.5
E. 100
A是一个无尽的数,所以A是;B 10^30 = 2^30 * 5^30 其中2^30说明指数位够,5^30 > 2^52,说明尾数位不够,所以B是;C因为2^-n都不可能是0.1所以也有误差,C是
最后感谢下狄泰软件学院的唐老师