[程序员] 一文简单明了说明为什么 float64 float32 会有精确缺失的问题


说明

  • float64 == 8 字节 == 64bit == 只能精确表达 18446744073709552000(2^64) 个数字
  • float32 == 4 字节 == 32bit == 只能精确表达 4294967296(2^32) 个数字

取值范围

  • float64 最大值大约是 1.8e308 ( 18 后面 307 个 0 )
  • float32 最大值大约是 3.4e38 ( 34 后面 37 个 0 )
  • 即使忽略小数,负数 从 0 到这个最大值都已经远远超出其能精确表达的数字了
  • 所以它们只能取接近的数字
  • 或者说他们的表达不是连续的 例如 1 4 8 15 当值是 7 时就会取最接近的值 8