在numpy中从double(float64)转换为float(float32)时的值差异

时间:2020-04-30 03:49:56

标签: python numpy

当我运行简单的代码时:

a = np.float64([20269207])
b = np.float32(a)

输出变为

a = array([20269207.])
b = array([20269208.], dtype=float32)

什么原因导致此转换前后的差异?在什么条件下输出会有所不同?

1 个答案:

答案 0 :(得分:0)

不可能以20269207IEEE 754)格式存储值float32

您可能会看到原因,

可以存储值2026920620269208;它们以二进制形式表示(请参见IEEE-754 Floating Point Converter):

  • 01001011100110101010010001001011 for 20269206
  • 01001011100110101010010001001100 for 20269208

它们的二进制形式的区别在于1,因此2026920620269208 之间没有任何数字。

根据IEEE 754的四舍五入规则“四舍五入,保持偶数” “四舍五入,保持零值” ,您的数字舍入到最接近的甚至更高数字,即四舍五入到数字20269208


整数输出将有所不同:

  • 对于绝对值大于16,777,216的奇数,
  • 用于几乎所有个绝对值大于33,554,432的数字。

注意:

  1. 第一个数字是2^24,第二个数字是2^25
  2. “几乎所有” –存在“很好”的数字,例如2的幂,即使非常大的数字,它们也具有精确的表示形式。