https://en.wikipedia.org/wiki/IEEE_754
计算机如何存储浮点数?
二进制的科学计数法
符号位 + 指数位 + 底数位
float 一共 32 位 = 1 + 8 + 23
double 一共 64 位 = 1 + 11 + 52
long double 一共 80 位 = 1 + 15 + 1(整数部分) + 63
(这个描述不完全准确,因为无法存储0,而且0与最小整数之间的间隔过大)
哪些整数可以被 double 精确表示?
最小不能被 double 精确表示的正整数是什么?
哪些整数可以被 long double 精确表示?
最小不能被 long double 精确表示的正整数是什么?
为什么 double 可以精确表示 2的次幂
2的次幂在二进制下只有一个1,用二进制的科学计数法表示出来是精确的
负数次幂也可以精确表示
每次乘以2,取整数部分
哪些数字可以被 double 精确表示? 0.1 0.2 0.5 0.75
只有在二进制下是有限小数的,才有可能被 double 精确表示
0.1 + 0.2
0.7 + 0.2 + 0.1
1.6 + 1.3 + 0.1
0.1 * 0.1
pow(0.1, 2)
1. / 100
0.01
1e-2
pow(10, -2)
0.5 不一定进位,会舍入使得个位变为偶数
直接用会有精度问题,绝对安全的方法:二分