浮点数运算为什么会丢失精度
在内存中存储的浮点数方法格式分别是
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)
浮点数实际就是用科学计数法记录数据的。
失真的科学计数法
科学计数法是一种简化计数的方法,用来近似表示一个极大或极小且位数较多的数,对于位数较小的数值,科学计数法没有什么优势,但对于位数较多的