单精度浮点数在内存中的存储

float 在内存中长度是32

double在内存中长度是64位(64位编译器)

总结实数转二进制float的方法:

A. 分别将实数的整数和小数转换为二进制
B. 左移或者右移小数点到第一个有效数字之后
C. 从小数点后第一位开始数出23位填充到尾数部分 
D. 把小数点移动的位数,左移为正,右移为负,加上偏移量127,将所得的和转换为二进制填充到指数部分
E. 根据实数的正负来填充符号位,0为正,1为负

float的精度:
取值范围看指数部分:
float是有符号型,其中,8位指数位,2^8=(-128—127),因此实际的范围是-2^128—2^127,约为-3.4E38—3.4E38
同理double范围约是-1.7E308—1.7E308,
精度是看尾数部分:
float尾数位23位,2^23=8.3E6,7位,所以不同的编译器规定不同,有些是7位,有些8位
double尾数52位,2^52=4.5E15,15位,所以double的有效位数是15位

参考链接

https://blog.csdn.net/qq_25800311/article/details/79420009

二进制float转实数

https://www.cnblogs.com/cppskill/p/5487425.html

你可能感兴趣的:(cpp)