手机浏览器扫描二维码访问
看着小黑屏中显示的y=3500000这段字符时,我心里没有丝毫惊讶。其实在老爹跟我说的时候我已经信了八分,剩下的两分并非是因为对老爹有所怀疑。
相反,我在主观意识上非常愿意相信老爹,因为从我记事以来,老爹从来没有骗过我。
但是老爹对我说过,对待一切都要有怀疑精神,一向便是如此的那并不代表就是对的。
所以剩下的两分便是来源于此,除此之外还多少包含一些不甘心,如果没有见到结果我真的不甘心推翻自己确信的答案。
既然正确的答案和我给出的不一样,接下来重点就应该是解决一个问题——why?
「在写程序的时候往往会用到很多数学相关的知识,甚至很多书上说数学作为程序员的基本素质之一。但是,这并不意味着写程序完全就是数学问题。
小数的精度损失就是最好的例子,在数学上能够精确表达的有限循环小数在程序中可能不能准确记录。」
老爹的这句话可谓是当头棒喝,让我内心剧震。因为我完全将程序当成了数学问题在处理!
「好了,我来跟你讲一遍这题为什么是这个答案,可要听仔细了。
首先,对于小数类型的数据,如longdouble、double、float三种类型的变量,无论你给它赋的值有没有小数,计算机在保存的时候默认会添加六位小数,如果不足位就添零。
题目中已经明确说明了y是double类型的变量,这是为什么在b答案3和d答案选3000000两个选项中选择d的原因。
那么接下来说说结果为什么是3而不是35。
还记得昨天我跟你说过,计算机其实很笨,它只会忠实地执行我们给它下达的指令么?」
「记得。」
我点了点头。
「嗯,其实这一点在这道题上得到了充分的展现。
计算机真的很笨,所以我们在下达指令的时候一定不能让它感到迷惑,否则程序必定出错!这一点一定要记住!
计算机在对数据进行数学运算的时候,整数和小数是严格分开的。如果表达式中的变量全部都是整数,那么计算机就进行整数计算,得到的结果也是整数。这就意味着在进行整数除法的时候如果产生了小数,小数部分会被丢弃掉!
比如说14,在数学上等于025,但在程序中则等于0。」
「哦,我知道了!这道题的结果之所以是3,是因为在计算32的时候得到的结果是1!」
我恍然大悟道。
「absolutely!」
「原来如此,那如果我想得到正确的答案怎么办?」
「如果想要正确地保存运算结果为小数需要保证两个条件:第一是接收运算结果的变量必须是小数类型,第二是表达式中有小数出现。
刚刚跟你说了,计算机在进行数学运算的时候整数和小数是分开。但是当计算机发现计算的表达式中包含了小数,它就会自动将所有的变量转换为小数来计算。就拿这道题来说,如果把被除数修改成30或者把除数修改成20就能得到和数学上相等的答案了。」
按照老爹所说,还真的得到了正确的答案。
「老爹啊,按照你所说的,计算机发现了表达式里边有小数,就会把所有变量转换为小数进行运算。可是变量a已经是double型的了,计算机应该把被除数和除数转换为小数计算,就应该得到正确的结果了啊。可是……」
我疑惑道。
「嘿嘿,你偷换概念了哦。我说的是变量而不是表达式,而32是个表达式!虽然a是个double型变量,然而计算机在计算的时候只会把32的计算结果转换为小数,但是在这个时候小数位已经被丢弃了。所以我说计算机真的很笨,就是这个原因了。」
张钟颖 我的蛮荒部落 上门龙婿陆凡 最强豪婿陆凡 韩娱之聚光 夫人的病今天好了吗 异界烽火录贰烽云再起 戚风童话 梦灾末世生存指南 迟宠 顾九辞霍明澈 阴阳眼小师妹 大佬甜妻宠上天 龙婿陆凡 青梅千千结 校园全能马甲女神 嗣子荣华路 四龙攒凤 王妃称心 衫生诡
为了游戏里的皮肤,女友竟然背着我百星荣耀王者强势回归,手把手教你上王者!...
公元前221年,六国一统,华夏归一。此时的大秦国很需要一位贵人相助。于是,败家子蒙毅挺身而出?是的,败家子,身为大秦第一败家子的蒙毅,当仁不让,开始了他没羞没臊的人生。...
炮灰是什么?雪兰告诉你,炮灰是用来打别人脸的。凭什么炮灰就要为男女主的感情添砖加瓦,凭什么炮灰就要任人践踏?凭什么炮灰就要为男女主献上膝盖?凭什么炮灰就要成为垫脚石?炮...
金寸心穿越到虐文里,成了王府的心机通房丫鬟,刚穿过来就被赶走,身无分文还要照顾不足三岁的软团子。家里的人都是奇葩,身边的渣渣绿茶层出不穷,大家都等着看她笑话。但是,金寸心穿越自带空间,谁都靠不住,还是自己撸着袖子摆摊赚钱,养活女儿,买地买房,置办行头,在虐文里暴富了。可是,小日子刚刚过得舒坦了点,暴虐王爷追过来了,什么?就连身世也大有乾坤。...
谋士与杀手疯狂生长的乱世,有人御狂局有人执狂子,笼络杀手捭阖朝堂。乱世,乱出谋士杀手的盛世。且看来自西渚千岛,历经逃杀来到大雍的古扬,如何步步执刀谋猎宫阙!如果不能回去,怎对得起当年鲜衣怒马!...
边疆战神得胜之际,却得知师妹被害,师父病入膏肓...