在对浮点数进行操作时,在Java中使用哪种舍入方法?

时间:2016-07-07 12:29:23

标签: java floating-point operation rounding-error

语言是Java,机器是带有Intel处理器的普通PC。类型是双倍。

浮点数不能精确地表示每个小数,分割或减法等操作的结果会以某种方式舍入到某个近浮点表示。

我在问是否使用的舍入策略是:

  1. 远离零
  2. 向零舍入
  3. 向负无穷大四舍五入
  4. 向正无穷大方向前进
  5. 四舍五入到最近(半上)
  6. 四舍五入到最近(半下)
  7. 四舍五入到最近(半偶数)

1 个答案:

答案 0 :(得分:3)

  

Java Virtual Machine Floating-Point Arithmetic and IEEE 754

     

...

     
      
  • Java虚拟机的舍入操作始终使用IEEE 754舍入到最近模式。不精确的结果四舍五入到最接近的可表示值,并且连接到具有零最低有效位的值。这是IEEE 754默认模式。但Java虚拟机指令将浮点类型的值转换为整数类型的值,舍入为零。 Java虚拟机无法提供任何更改浮点舍入模式的方法
  •   

因此,正如Patricia Shanahan已在评论中回答,JVM的舍入模式固定为#7 从您的列表中舍入到最近(半偶数)。但是这仅适用于浮动到浮动的舍入。浮点到整数舍入使用#2 舍入为零