码农可能觉得是一个小事,却颠覆了我的认知
- 电冰箱看D版sunmingqiu写的《Pythone管窥》一书,有这么一段:
小数也称作浮点数,小圆点好像可以浮动一样。实际上在各种编程语言里,小数实际上是不精确的。比如:0.1+0.1+0.1-0.3=5.551115123125783e-17
为什么会这样?!这个其实是计算机硬件的一个内在缺陷,导致了浮点数运算的精度出现了问题。
我一直以为计算机别的不说,在计算方面是绝对正确的,没想几千块买的cpu,这种小学数学题都算不来 。 - 令狐飞云浮点运算是因为进制转换吧
- yipsilon是的,经常float或double类型直接乘除运算出来的就是 x.000000000000001 或者 y.999999999999。
- zqj1024我还打印出来了,但好像学不会
- cxzx150133这不是硬件缺陷,这是基于二进制设计的计算机进行十进制运算的必然。
二进制不能准确的表示所有十进制数。 - Greazen因为二进制能精确表示的小数只有0. 5的n次方的组合
- LittlePan没错,所以比较浮点值的时候不可以直接比较,要比较两个数的差。
- Romney所以需要BigDecimal
- jeadong你要是知道某年Intel芯片层面就算错是不是直接奔溃了客户安卓猴自己端
- 斩断意识流想精确计算,用mathematica
- sz-hiker看不懂
- jiang_gg刚想说这个… iOS fly ~
- lance6716也不叫缺陷。把(范围、精度、……)无限的数字用有限的硬件表示本来就不可能,只能用近似表达
- beck917
- ageg这句话理解不对。计算机是绝对正确的,只是进制转换不精确而已。如果人类也用二进制,那么就不会有误差。
- weiyangge首先,你得知道浮点数在计算机内部是怎么表示的。
- jckimi
- se_happy这不是硬件缺陷
这是浮点数精度问题 iOS fly ~ - RobbieXP二进制,有限位数,计算效率,小数的表示形式
- timeinwait想一想二进制
- yhny深入理解计算机系统
看完这本书就知道了 - 猫了个咪的编码在计算机中是比较麻烦的问题
- honkin这就是理论和实际的差距吧,就像任何测量出来的尺寸都是测量值,只能越来越接近真实值 iOS fly ~
- zhdphao这都不是事儿。在要求更高精确度的场合,可以专门编程,比如说,用10000000个bit表示一个小数。
- navyyang浮点运算就是这样的。
- 寒冰炫我java对double型处理的时候,特别是除法,经常会遇到结果是1.129999999999999之类的后面一大堆数字出现
这个一不注意就中招了,我的解决方法是四舍五入到小数点后两位... - BuleGood进制转换导致的精度缺失小尾巴~
- welcomyou我们的表示分钟的是60进制 你把59分钟转换成十进制一样有误差 为了避免误差 我们就不转换 因为我们的脑子还能算的过来 同理 如果我们能看待二进制和看待60进制一样容易 你也可以不转换 直接读二进制 现在的问题是你没用能力对二进制进行自如的解读 那计算机帮你转 误差就自己担待吧 iOS fly ~
- tsounny几百万买的跑车,居然没有手扶拖拉机拉的东西多
- 轧钢机还记得当年的千年虫 bug吗 就是电脑只能用到1999年... 哈哈
- lanwater看起来你从来不用excel计算大量数据 iOS fly ~
- ehgui楼主你去学学小数的进制转换就知道了
- zengshu0.1+0.1+0.1-0.3
如果只是这种,可以用整数计算模拟(定点计算),用不着浮点。 - 大部头书你觉得宇宙中的普朗克常量是怎么回事
- harriet_yang这不算缺陷吧,这是人力不能做到的地方。 就好像你不能写出来一个无限小数, 有限的硬件当然也做不到。
- xyching
- Ricepig这个是计算机系统里定义的浮点数及计算方法的问题。ieee 754。