程序员视角看手机计算器上为什么10%+10% != 0.2 ?
近日,一则热搜#手机计算器全线阵亡#的话题在网上火了起来。不少网友惊奇地发现,在自己的智能手机上打开计算器,计算10%+10%,得出的结果竟然是0.11!
网友反映,华为、苹果、OPPO、VIVO、小米、一加等多个品牌的手机计算器都出现了这样的“BUG”;也有人发现,魅族、锤子科技、努比亚手机的计算器结果是0.2,贴上了很多逻辑思维,文化差异的标签,下面用两个手机对比一下差异。
不少科技博主指出,出现这样的“BUG”,原因主要是计算器对输入符号的理解不同。一些手机厂商的高管也出来进行了解释,比如魅族科技的副总裁华海良在微博的发言:
还有荣耀业务部总裁赵明,也在微博发表了自己的观点,很有意思。
没想到在18年的时候,MIUI就回复了这个问题,现在才火起来,估计当时都是懵懵的,不明觉厉。
我们在进行四则运算时,都是先乘除后加减,如果有括号就先算括号里的。而百分号“%”则代表“除以100”,和乘除是同样的优先级。因此,我们计算10%+10%得出的结果为0.2。即10%+10%=0.1+0.1=0.2。
在传统的百分号运算中,计算器对输入符号的理解和我们是不一样的。传统的百分号运算都是在第一个数的基础上增加10%作为第二个数。也就是X+n%就是在X的基础上上浮n%,也就是X+X*n%。在10%+10%的运算中,计算过程即为10%+10%=10%+10%*10%=10%*(1+10%)=0.11。
作为一个程序员,自然要从代码的角度来看了。Windows Calculator应用程序是一个用 C ++编写的现代Windows应用程序,预装了Windows。该应用程序提供标准,科学和程序员计算器功能,以及各种度量单位和货币之间的一组转换器,其中只有标准模式有“%”。
为此我在github上找到了微软开源的计算器项目,我找到关于“%”计算的部分,摘出了其中相关的代码:
注释中也已经解释了,当操作符是乘法或者除法的时候,与“%”相关的直接除以100再和另外的数操作(即我们通常认识的算法),否则就按照上一次结果的百分比来计算。
所以,如果你计算10%+10%,它是下面的过程:
结果 —— 操作
0 初始值
0 输入10%,计算0 + 10% * 0
0 输入+10%,计算0 + 10 *0
最终会得到0
只不过很多手机计算器中直接把第一个10%当成了0.1,这也就是我们看到一些手机计算器最终会得到0.11结果的原因
但是如果你计算1000 * 10%,它按照原始的方式计算,即计算得到100。所以这是有意为之,而并非什么bug!程序员表示不背这个锅。
另外我们都知道,“%”常用于取模运算,它是一个二元运算符,这也正是科学模式和程序员模式没有“%”的原因,因为“Mod”取代了,例如:7%2 = 1
所以当你在Linux的命令行输入bc,然后输入10+10%,你会看到下面的结果:
$ bc10+10%(standard_in) 3: syntax error7%21 没错,它会提示你语法错误,而不是帮你计算10的10%,因为这里的“%”并非计算百分数,而是用来取模的。所以在windows自带的程序员计算器和科学计算器中,有“Mod”,而没有“%”。
注意:Linux下,bc命令是一种支持任意精度的交互执行的计算器语言,可以很方便的进行浮点运算,当然整数运算也不再话下。
如果在输入时,将每个10%乘1,就能得到正确答案,至于为什么会这样,就交给大家去思考吧。
从程序员视角看,这不是Bug,“%”在不同的场景之下有不一样的作用,人们也在不断更新进步,将这些生活场景应用在机器软件上,智能的路还有很远,但就在未来。
你的手机在不同模式下是什么样的呢?
这种计算方式有必要吗?
身为一名程序员,这个锅你愿意背吗?
最近更新影视资讯
- 韵府群玉
- 老年临终关怀护理集锦9篇
- 如何评价剧场版动画《和谐(harmony/ハーモニー)》原作:伊藤计划 ?
- 智人战胜尼人的决定性因素 是神灵崇拜与艺术品 在3万7千年前智人击败了远比自己强
- 沈阳参考消息(2017年1月11日)
- 密集架区密集架书库图书馆负一楼期刊阅览区中外文期刊图书馆一楼图书借阅区(A-H
- 费维光:脾胃病17方
- 土耳其身为伊斯兰国家,为什么允许“风俗产业”合法化?
- 高中教师教学反思
- 三观尽毁!90后公务员出轨50岁女上司,聊天言语暧昧,妻子怒举报
- 22应用心理学考研347 首师360有调剂院校吗?
- 铃木凉美女士,你仍期待同时收获怜爱与尊敬吗?
- 团建别墅 | 确认过眼神,是能疯一起的人!Boss,今年年会我们泡私家温
- 《归来》观后感
- 翻译伦理的重要性和译者荣辱观建设研究
- 高二语文期末考试测试题及答案
- 国医大师名单!在北京看中医该找谁,这下全知道!
- 这些年爱过的同人文(BG)
- 荷兰深陷风俗业?日本都要甘拜下风,为何能稳坐世界顶尖位置!
- 戴安娜25年前私密录像首次解密:自述性生活,全英国都被炸懵逼了
- 原创上官婉儿为什么必须死,她做的这件事太无耻,李隆基忍无可忍
- 「医药速读社」Paxlovid临床失败 礼来斥巨资引进Kv1.3抑制剂
- 她是韩国性感女神,靠出演“三级片”走红,今41岁韵味不减当年!
- 电影市场有望点燃 好莱坞大片排队上映
- 评荐《传染病(Contagion)》