首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

程序在99.99%的情况下是可靠的,但是有那么0.001%你遇见过么?

大多数人认为,计算机程序都是有严密的逻辑,每一步都是没有任何歧义,因此程序是最值得信赖的,程序的计算结果是非常可靠的,比如说去超市买东西的时候,好多人拿到小票后只是会核查小票上的商品项及商品价格,但是从来不会有人拿着价格在自己累加一遍,因为大家都知道程序不可能算错的,也没有必要浪费这个时间不是么?的确,在99.99%的情况下,程序都是正确的,如果不正确也是人的设计有问题,不过也真有那么0.001%的情况下,程序也会出现“不靠谱”,好多人把这种问题归结为“临界点问题”。

这不,近期就有一位程序员朋友发现了一段代码出现了“不靠谱”的行为,这名程序员网友用的是python语言(python2.7),他用四舍五入函数计算了2.4999999999999997与2.4999999999999998,得到的结果分别是2与3,在正常人的思维意识里,结果肯定是2了,因为四舍五入吗?毕竟这两个数都是小于2.5的,这又是哪里出问题了呢?我想肯定有一群码农网友要争着解释这个问题了吧,让我们来一起看看他们谁说的有道理吧!

网友一:cpu真是一个不靠谱的东西

上世是朵花:cpu:我不背这个锅,我一向是按逻辑办事的,都是按照你们设计的来的。

网友二:组成原理浮点数编码了解下

上世是朵花:除了这种情况,有经验的码农都知道不能拿两个浮点数做 相等比较,比如 不能 a == b ,而应该是 a-b

网友三:js是更神奇的语言

上世是朵花:没错,这样的现象在js语言中也是同样存在的,大家不妨试试其他语言,也有可能是这种情况。

网友四:从JAVA转算法,无力吐槽python

上世是朵花:你倒是吐糟一下,让大家都看看是什么内容啊

网友五:py3不会这样

上世是朵花:这个没有亲自试过,有兴趣的同学可以求证一下。

网友六:这你就不懂了吧,看看浮点数的精度就明白了

上世是朵花:能再具体点就好了,这只是大概,但是不够具体

网友七:Python内部实现的问题,浮点数精度不背这个锅

上世是朵花:不只是python是这样啊,js也是同样问题,亲测,其他语言也很有可能有这种情况

网友八:踩过python和lua 针对64位整数问题的坑

上世是朵花:是的,我想大多数程序员都遇见过int溢出的问题,当数字达到一定程度后就变成了另一个数字了,64位计算机与32位计算机的具体临界值是多少,大家可以网上查查,有兴趣的可以去亲自试验一下。

程序是可靠的,但是这是有前提条件的,任何事情都是有边界的,在边界之内,他是可靠的,但是超出边界可能就会出现意外的结果,这并不是说程序不可靠,因为程序是人设计的,什么事情都不可能是绝对的完美,这个“临界点”才是我们在实际项目中应该特别注意的,在实际工程中,多少年来,总有程序员会在这上面犯错误,小则是一个bug,大则是出现巨额经济损失,因此在这些临界点上千万不能马虎,有些事情不能只是想当然,应用于工程之前,最好是先做个小实验,确认没问题时再应用于工程,程序虽然是可靠的,但是在一些边缘性的地方,我们还是值得注意,这应该是设计上不足,我们千万不能跳进这样的坑,否则就会出现差之毫厘谬以千里。

以上所有图片均来之互联网

大家好,我是“上世是朵花”。如果你有什么好的看法或者观点可以在评论区展现你的才华,互动交流,如果想进一步了解我,那就关注我吧!

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190628A0065400?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券