dabocaiqq 2020-04-13 15:23 采纳率: 63.1%
浏览 187
已采纳

高分提问悬赏:Java语言浮点数的计算的误差是什么意思,为什么会出现这个情况

高分提问悬赏:Java语言浮点数的计算的误差是什么意思,为什么会出现这个情况
高分提问悬赏:Java语言浮点数的计算的误差是什么意思,为什么会出现这个情况

  • 写回答

4条回答 默认 最新

  • 这不是鸭头 2020-04-16 14:01
    关注

    浮点数值不适用于无法接受舍入误差的
    在金融计算中。
    例如,命令System.out.println( 2.0-1.1 ) 将打印出 0.8999999999999999, 而不是人们想象的 0.9。这种舍入误差的主要原因是浮点数值采用二进制系统表示, 而在二进制系统中无法精确地表示分数 1/10。这就好像十进制无法精确地表示分数 1/3—样。如果在数值计算中不允许有任何舍入误差,就应该使用 BigDecimal类。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
  • shy078 2020-04-13 15:40
    关注

    浮点计算的误差和计算值组成原理相关,具体理论不讲了,举个例子来看,比如7.49 * 7.49,但是计算看到的不是7.49而且不断接近7.49的一个数值,最终通过移位相加得到最终的乘积,在每次相加的过程中对于精度会有取舍,所以会存在一定的误差。

    评论
  • qq_1113502097 2020-04-13 16:40
    关注

    (大多数编程语言都存在的误差bug)计算误差主要是来自于计算机原理的误差。在计算机中,一个数是由二进制表示的,整数部分是不用考虑,利用二进制是可以表示所有整数,小数部分就来了,小数部分计算机采用的也是二进制,但是不同的是,适指数去表示,比如0.5就是1/2,也就是2的负一次方,0.25/0.75分别可以表示为2的负二方和2的负一次方加上2的负一次方。你可以理解为小数部分的二级制为 0.5=1,0.25=10,0.75=11(具体的你要去看详细的了),因此带来了问题就是,不是所有的小数都可以完全表示成这种二进制的,那么计算机又是怎么保存的呢,这就是精度,计算机会寻找精度限制内最接近的一个二级制值来保存。也就是这个过程数值被改变了,一般情况下不容易被发现,但是如果经过级数的扩增,这个误差被放大了几个级别之后,就会被发现。因此在统计和经济领域,一般不用这个来保存数值,而是采用其他的数值去保存。大致如如10.01,可以保存为与10相关的整数,2 1001(2表示小数点的位置或者整数的长度) 119.009可以表示为3119009。

    评论
  • BMKB 2020-04-15 09:17
    关注

    浮点数参与了计算,那么浮点数二进制与十进制间的转换过程就会变得不可预知,并且变得不可逆,浮点数并不适合用于精确计算,而适合进行科学计算。https://blog.csdn.net/code_dream_wq/article/details/74451478 解释的很清楚

    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 matlab+波形匹配算法
  • ¥15 转录组分析做聚类树图时癌旁组被分到了癌组
  • ¥15 大一Python字典
  • ¥15 multisim电路设计(相关搜索:设计报告)
  • ¥15 PC-lint Plus
  • ¥15 gpl24676注释
  • ¥15 php5.3内存泄露
  • ¥15 DigSilent如何复制复合模型到自己案例?
  • ¥15 求日版华为b610s-77a 官方公版固件,有偿
  • ¥15 关于#java#的问题,请各位专家解答!(相关搜索:java程序)