浮点数运算为什么会丢失精度
在内存中存储的浮点数方法格式分别是
float 符号位(1bit) 指数(8 bit) 尾数(23 bit)
double 符号位(1bit) 指数(11 bit) 尾数(52 bit)
其中指数也有正负之分,有一个bit位是符号位。
于是,float的指数范围为-128 +127( -2^7= -128 —— 2^7 -1=127) ;
而double的指数范围为-1024 +1023( -2^10= -1024 —— 2^10 -1=1023)
其中负指数决定了浮点数所能表达的绝对值最小的数;而正指数决定了浮点数所能表达的绝对值最大的数,也即决定了浮点数的取值范围。
float的范围为-2^128 ~ +2^127,也即-3.40E+38 ~ +3.40E+38;
double的范围为-2^1024 ~ +2^1023,也即-1.79E+308 ~ +1.79E+308
2的0——10次方对应的十进制数分别是
1 2 4 8 16 32 64(2^6) 128 256 512 1024(2^10)
浮点数实际就是用科学计数法记录数据的。
失真的科学计数法
科学计数法是一种简化计数的方法,用来

浮点数在内存中的存储格式导致了精度丢失。由于指数位和尾数位的限制,二进制无法精确表示某些十进制数,如0.1,这在浮点数运算时产生“减不尽”的现象。科学计数法虽然方便大数表示,但也会导致小数部分的精度损失。因此,浮点数不适用于需要精确计算的场景。
最低0.47元/天 解锁文章
5078

被折叠的 条评论
为什么被折叠?



