在反演下关闭双值

时间:2017-07-31 08:12:02

标签: java floating-point double floating-accuracy

对于哪个输入,以下函数会减少到标识(模1 ulp)?

public static double invertTwice(double value) {
  double inverse = 1.0 / value;
  return 1.0 / inverse;
}

此外,函数为标识的最大区间[min, max]是多少(模1 ulp)?

如果倒置时,[1E-320 ... 1E-310]范围内的值如何映射到+ Infinity? (随后的反转将导致0.0!)

动机:一般关系

a / b == a * (1.0 / b)

不适用于所有双对,即使b != 0.0,例如a = 0.0b = 4.9E-324

在规范化向量时必须考虑这一点,例如

[0.0 b 0.0] * (1.0 / b) == [NaN Infinity NaN]

[0.0/b b/b 0.0/b] == [0.0 1.0 0.0]

备注:我的问题不是关于规范化向量,而是关于我上面写的内容。谢谢!

1 个答案:

答案 0 :(得分:0)

使用二分检索,我发现在2x反转下不变的双值区间

value == 1.0 / (1.0 / value)

[5.562684646268010E-309 ... 1.7976931348623151E308]