【问题标题】:multipilcation of float value by -1 in javajava中浮点值乘以-1
【发布时间】:2013-07-04 05:27:25
【问题描述】:

为什么当 0.0 乘以 -1 时我得到 -0.0? 我已将 0.0 作为浮点数

sign=-1;
float output=0.0;
JOptionPane.showmessagedialog(null,0.0*sign);

输出显示为 -0.0 而不是 0

【问题讨论】:

  • 这对我来说似乎是正确的行为。你期待会发生什么?
  • 我们应该得到 0.0 或 0 对吧?为什么它以-0.0的形式出现?
  • 不。您正在体验浮点运算的已知正确行为。
  • 我能解释一下为什么浮点数有这样的价值吗?因为在算术中 0.0 *-1 应该是 0.0 rit?
  • -0.0 是 0.0 的负数。为什么你不应该得到这个值?符号是一个单独的位。这意味着对于每个正值都有一个负值。 BTW 1/0.0 是正无穷大,1/-0.0 是负无穷大。

标签: java floating-point multiplication


【解决方案1】:

这是来自http://www.javawebtips.com/154041/的答案

 "-0.0" Is produced when a floating-point operation results in a negative floating-point number so close to 0 that cannot be represented normally.

  -2.0 / Float.POSITIVE_INFINITY -> -0.0 

"-0.0" Is numerically identical to "0.0". However, some operations involving "-0.0" are different than the same operation with "0.0".

  (-0.0) == 0.0 -> true 
  2.0 / (0.0) - Infinity 
  2.0 / (-0.0) ->-Infinity 

【讨论】:

  • 感谢您的解释
【解决方案2】:

浮点值有正零和负零。它可能看起来很古怪,但有一个很好的理由(考虑到浮点数的表示限制)。

如果您真的希望答案只是 0,您可以考虑将结果转换为 int

【讨论】:

  • KKK..非常感谢Gain先生
【解决方案3】:

Java 浮点中的零不仅仅代表实数零。它们用于表示每个绝对幅度太小而不能表示为非零数的数字,每个下溢结果。

同样,无穷大不仅表示除以零的结果,还表示绝对量级太大而无法表示为有限数的每个结果,每个溢出结果。

零符号允许区分正下溢结果和负下溢结果,包括,如另一个答案中所述,在非零数除以下溢结果时获得正确的无穷大。

【讨论】:

    猜你喜欢
    • 2018-10-08
    • 2016-01-12
    • 2021-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-26
    • 2014-02-14
    • 1970-01-01
    相关资源
    最近更新 更多