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

标签 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 规则不影响结果。

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

最佳答案

不同之处在于解释器如何显示输出。

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

如果,在你写的解释器中:

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

(这就是您在代码中所做的)您会看到 -0.2

同样,如果在您的代码中您这样写:

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

(这就是你在解释器中所做的)你会看到 -0.19999999999999996

关于python - 为什么运行 python 解释器和 python 代码的结果不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46128452/

相关文章:

python - logistic/sigmoid 函数实现数值精度

匹配 float 的Python正则表达式

python - python/numpy 中的 float 学不能跨机器重现

haskell - 浮点列表生成器

python - 使用 pyspark 将 zip 压缩的 csv 转换为 parquet

Python Pandas 额外的逗号

python 2.6 - django TestCase - assertRaises ValidationError clean() 方法

python - 在Python中使用sql将一行合并在一列中

python - 将数组列拆分为行 pyspark

java - roundToDecimals 返回太多数字