美文网首页小白从零开始学python
你以为你了解了浮点数?真相是很残酷!

你以为你了解了浮点数?真相是很残酷!

作者: 问天eric | 来源:发表于2017-01-06 00:22 被阅读164次

小白:大神,咱们开始吧,我今天把数据类型和变量这章学完了呢。

大神:你先谈谈你对浮点数的理解吧。

小白: 浮点数就是带小数点的数呗,和整数相比特点就是计算不精确,但是不知道为什么不精确。

大神:好的,看来你似乎也没啥不理解的,来做个题,判断下0 == 0.0这个表达式是True还是False?

小白:False

大神:那你也False了,不过你现在不用知道原因,反正你知道原因也会忘记。现在就只需要知道,你知道了0 == 0.0是True的。

小白:。。。。。。好吧,默默的跑到编译器里面跑了一遍,还尝试了一下

1 == 0.9999999999999999999居然也是True。

大神:嗯,很多事情不用讲你也会发现的,所以不用上来就告诉你道理,等知道的事情多了,自然就懂道理了。来判断下(10/3-3-1/3)= 0是True还是False?

小白:这个是True,我还在编译环境里面运行了下,哈哈,这次没错了。

大神:嗯,等等,你编译环境是python 2.x,现在我们需要把它更换成3.x,你试着输入(10.0/3.0-3.0-1.0/3.0)看看结果。

小白:好吧,你就是不能让我对一次啊。。。结果是1.6653345369377348e-16这么奇怪啊,无语。

大神:好的,你现在就是体验到了浮点数计算是不精确的实际感受了。接着继续,1e5+1e-5>1e5 成立吗?

小白:True

大神:那么继续1e10+1e-10>1e10呢

小白:还是True

大神:你先计算下1e10 + 1e-1

小白:10000000000.1

大神:那你计算下1e10 + 1e-5

小白:10000000000.00001(这简直逗我数0嘛)

大神:那你在python里面运行下1e10+1e-6看看结果

小白:一脸懵逼了,python里面显示是10000000000.000002

大神:哈哈,你再试试1e10+1e-7,你就明白为什么1e10+1e-10>1e10是False了

小白:好吧,我猜到了这里面有坑,但是我不知道这个坑在小数点后几位

大神:总结下,这个其实是有效位数的问题,python里面15位有效数字准确性是能够保证的,16位就不准确了。

小白:已经懵了,那到底实际原因是啥呢?

大神:这里牵扯到浮点数二进制格式,作为课外作业吧,想搞清楚可以查IEEE 754 手动计算下。

大神:好了,这个其实并不重要,重要的是不要以为数学计算上是0,用浮点数计算也会是0。

编程和学数学不一样,数学需要每一步都正确才能开始下一步,编程因为实践性强,一些问题开始的时候不好解决,可以在后面学习过程中综合起来改。

好了,最后你再试一个7e10+1e-5,看看结果会如何?

小白:我勒个去,为什么python里面算出来会是70000000000.00002

大神:好啦,今天就教(虐)你到这把,IEEE作为课后思考题,你可以去算算。

相关文章

  • 你以为你了解了浮点数?真相是很残酷!

    小白:大神,咱们开始吧,我今天把数据类型和变量这章学完了呢。 大神:你先谈谈你对浮点数的理解吧。 小白: 浮点数就...

  • 你会恐惧生活,不信花5分钟总结试试

    今天(第109次分享)是一个新概念:总结。 说个很残酷的真相:你以为的努力,认为很勤奋,只是在原地踏步而已。 不服...

  • 有书共读《奇迹唱片行》

    你以为的真相并非真相,你以为的致敬也并非致敬,你以为的一切,最终全会逆向打脸。 《奇迹唱片行》讲述了很...

  • ​乱言2

    ​乱言2 文:Recycler 54/401.2422 简版:告诉你真相,真相很残酷,毫无感情,幸福离你而去。 一...

  • 追风去,不如等风来

    你跋山涉水去见的那个人,根本不会记得你,他只会记得自己跋山涉水见过的人 真相很残酷,真相也很美好 起码让你知道...

  • 真相

    生活的真相其实很残酷 当你能够接受倾尽所有也无法阻挡某件事的发生时,你就能领略到生活的真相了。

  • 阻止你变有钱的真相,有点扎心但是很现实

    你知道是谁在阻止你成为有钱人吗?今天我告诉你一个,从来没人跟你讲过的残酷真相,很扎心但也很现实 你知道为什么你致富...

  • 你变好了,也未必能等到对的人

    很残酷,对不对?喝够了鸡汤的姑娘们信奉:“我若盛开,清风自来”。然而,残酷生活的真相却是:“你很美,也很好,...

  • 知道的少些或许会快乐一点。

    有时候,往往你认为不是真相的真相才是最残酷的。

  • 你真的懂你买的币吗?

    你知道一个残酷的真相吗? 你看到的世界,只是你以为的世界,世界并非你想象。 为什么呢? 这里的罪魁祸首,是我们人类...

网友评论

    本文标题:你以为你了解了浮点数?真相是很残酷!

    本文链接:https://www.haomeiwen.com/subject/wqktbttx.html