发现 Python 的一个坑。。。

2016 年 6 月 5 日
 hard2reg

不知道是不是所有语言都是这样的。。

#我用的是Python3
a = 1 / 3
# 这时候 a 打印出来应该是 0.333333333
b = 1 / a
# 这时候打印 b 居然输出的是 3

这说明 Python 在内部是以分数的形式储存无限循环小数的?

还是我孤陋寡闻了。。。。

10393 次点击
所在节点    Python
60 条回复
clino
2016 年 6 月 5 日
明明 1/3 是 0
>>> print 1/3
0
hard2reg
2016 年 6 月 5 日
@clino 我用的是 Python3
bytenoob
2016 年 6 月 5 日
明明 1/3 = 0
b = 1/0 = ∞
hard2reg
2016 年 6 月 5 日
@Yc1992 我 Python3 。。。。
publicID002
2016 年 6 月 5 日
应该是输出的时候位数默认不多有舍入
wsy2220
2016 年 6 月 5 日
浮点计算不保证结果精确的,换一个数甚至换一个机器结果就不一样了
Kisesy
2016 年 6 月 5 日
py
0.3333333333333333 3.0
go
0.3333333333333333 3
momo1999
2016 年 6 月 5 日
print(2.999999999999999999999999999)
billlee
2016 年 6 月 5 日
不要依赖未定义行为
clino
2016 年 6 月 5 日
py3 的表现也合理啊
>>> print(1/3)
0.3333333333333333
>>> print(1/(1/3))
3.0
>>> print(1/0.3333333333333333)
3.0
justjavac
2016 年 6 月 5 日
是你孤陋寡闻了。
浮点数的内部表示和浮点数的显示是两码事
justjavac
2016 年 6 月 5 日
pimin
2016 年 6 月 5 日
我发现数学的一个坑
1/3=0.3333333...
0.33333*3<1
3*1/3=1
ipconfiger
2016 年 6 月 5 日
楼举不是计算机科班出身的吧, 先搞清楚二进制怎么存储浮点数就清楚了,如果我记得没错应该是在计算机组成原理的课本里有
hadoop
2016 年 6 月 5 日
@pimin 0.3333.....≠ 0.33333
hard2reg
2016 年 6 月 5 日
@justjavac 大神啊,要出版了
hard2reg
2016 年 6 月 5 日
@pimin 我没有任何这个意思。。。
fy
2016 年 6 月 5 日
日常又发现一个坑。。。
hard2reg
2016 年 6 月 5 日
@justjavac 貌似 JS 和 Python 都会出现 0.2 + 0.4 ≠ 0.6 的情况,但是我用 C++试了下输出的是 0.6 。请问这是为啥。。

float a;
a = 0.2 + 0.4;
cout << a << endl;

如果想要让 JS 和 Python 正确输出 0.6 改如何写。。
jimmyye
2016 年 6 月 5 日
要用 decimal 之类的库

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://v2ex.xtra.eu.org/t/283686

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX