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.0
和 b = 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]
对于哪个输入,以下函数归约为恒等式(模 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.0
和 b = 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]