double 值在反转下闭合

double values closed under inversion

对于哪个输入,以下函数归约为恒等式(模 1 ulp)?

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

另外,函数为恒等式(模1 ulp)的最大区间[min, max]是多少?

为什么 [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]

备注:我的问题不是关于归一化向量,而是关于我上面写的。谢谢!

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

value == 1.0 / (1.0 / value)

成为

[5.562684646268010E-309 ... 1.7976931348623151E308]