对于哪个输入,以下函数会减少到标识(模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.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]
备注:我的问题不是关于规范化向量,而是关于我上面写的内容。谢谢!
答案 0 :(得分:0)
使用二分检索,我发现在2x反转下不变的双值区间
value == 1.0 / (1.0 / value)
是
[5.562684646268010E-309 ... 1.7976931348623151E308]