为什么运行python解释器和python代码之间的结果不同?

时间:2017-09-09 07:57:11

标签: python floating-point

我在python解释器上创建了一个简单的代码并运行它。

Python 3.5.3 (v3.5.3:1880cb95a742, Jan 16 2017, 16:02:32) [MSC v.1900 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy as np
>>> x=np.array([0,1])
>>> w=np.array([0.5,0.5])
>>> b=-0.7
>>> np.sum(w*x)+b
-0.19999999999999996

结果-0.19999999999999996很奇怪。我认为......它是由IEEE 754规则引起的。但是当我尝试按文件运行几乎相同的代码时,结果会有很大不同。

import numpy as np
x = np.array([0,1])
w = np.array([0.5,0.5])
b = -0.7
print(np.sum(w * x) + b)

结果为“-0.2”。 IEEE 754规则不会影响结果。

基于文件的运行和基于解释器的运行有什么区别?

2 个答案:

答案 0 :(得分:9)

差异是由于口译员如何显示输出。

print函数会尝试使用对象的__str__方法,但解释器会使用对象的__repr__

如果你在翻译中写道:

...
z = np.sum(w*x)+b
print(z)

(这是您在代码中执行的操作),您将看到-0.2

同样,如果在你的代码中你写了:

print(repr(np.sum(w * x) + b))

(这是您在翻译中所做的事情)您会看到-0.19999999999999996

答案 1 :(得分:0)

我认为不同之处在于,您使用print()作为基于文件的代码(转换数字),而在解释器的情况下,您不使用print(),而是询问解释器显示结果。