当我运行简单的代码时:
a = np.float64([20269207])
b = np.float32(a)
输出变为
a = array([20269207.])
b = array([20269208.], dtype=float32)
什么原因导致此转换前后的差异?在什么条件下输出会有所不同?
答案 0 :(得分:0)
不可能以20269207
(IEEE 754)格式存储值float32
。
您可能会看到原因,
可以存储值20269206
和20269208
;它们以二进制形式表示(请参见IEEE-754 Floating Point Converter):
01001011100110101010010001001011
for 20269206
01001011100110101010010001001100
for 20269208
它们的二进制形式的区别在于1
,因此在20269206
和20269208
之间没有任何数字。
根据IEEE 754的四舍五入规则“四舍五入,保持偶数” 和“四舍五入,保持零值” ,您的数字舍入到最接近的甚至更高数字,即四舍五入到数字20269208
。
整数输出将有所不同:
16,777,216
的奇数,33,554,432
的数字。注意:
2^24
,第二个数字是2^25
。