为什么结果应为整数时应重复出现?

时间:2019-05-25 18:23:07

标签: python numpy

嗨,我正在为类和线性回归编写一些代码。
对于您在代码中可以看到的数据,手工计算得出的值为a = 1.7和b = 1.6。

我尝试将公式的不同部分分成不同的变量,但答案仍然相同(1.6999999999999993)。

import numpy as np  
x=np.array([2,3,5,6])  
y=np.array([4.5,7.2,9.2,11.5])  
b=(np.sum((y-np.mean(y))*x))/(np.sum((x-np.mean(x))*x))  
a=np.mean(y)-(b*(np.mean(x)))  
print(a)   
print(b)  

预期结果为a = 1.7和b = 1.6,但输出为a = 1.6999999999999993。

2 个答案:

答案 0 :(得分:0)

这是因为您使用的是:02.2f数字,所以二进制浮点运算就是这样。在大多数编程语言中,它基于IEEE 754 standard

请参阅Is floating point math broken?

答案 1 :(得分:0)

它基于IEEE 754 standard

但是如果您希望结果以'a = 1.7'的形式出现。那你可以试试看。

import numpy as np  
x=np.array([2,3,5,6])  
y=np.array([4.5,7.2,9.2,11.5])  
b=(np.sum((y-np.mean(y))*x))/(np.sum((x-np.mean(x))*x))  
a=np.mean(y)-(b*(np.mean(x)))  
a = "%.1f"% (a)
print(a)   
print(b)