【问题标题】:How to get floating point error size at a specific value in Java?如何在Java中获取特定值的浮点错误大小?
【发布时间】:2019-01-12 18:40:18
【问题描述】:

是否有任何 Java 内置函数或更好的解决方案来查找浮点错误? 或者,换句话说,有没有办法找出我可以添加到double 变量中的最小值,该变量不会因浮点舍入而被忽略?

现在我认为获得它的一个好方法是翻转其中的最后一位,从变量中减去它,并将结果也返回为double

double getFloatPointError(double in){
  long bits = Double.doubleToLongBits(in);
  bits^=1;
  return Math.abs(in-Double.longBitsToDouble(bits));
}

我认为这不是一个好的解决方案,因为输出结果本身是double,因此也容易出现浮点错误并可能给出不正确的结果。另外,我可能正在用这种方法重新发明轮子,这是我想避免的。

澄清:我知道什么是浮点值,我知道在准确性很重要时不应该使用它们,并且我知道为此我应该使用BigDecimal。请不要发布与浮点相关的一般信息和建议,因为它们不太可能包含我的问题的答案。

【问题讨论】:

标签: java floating-point precision


【解决方案1】:

【讨论】:

  • 是的,这似乎就是我要找的东西。除了,返回值是否仍然是double,即本身也有一些错误?
  • 我认为这取决于您需要这些信息的目的,以及您所说的错误是什么意思。例如,即使BigDecimal 也无法处理像 1/3 这样的数字而不会出现“错误”,因为 BigDecimal 仅限于可以表示为 (a x 10^n) 的数字,其中 a 和 n 都是整数。
猜你喜欢
  • 2017-08-15
  • 1970-01-01
  • 1970-01-01
  • 2020-04-15
  • 1970-01-01
  • 2013-03-09
  • 1970-01-01
  • 2012-12-10
  • 1970-01-01
相关资源
最近更新 更多