给定一个标准化浮点数 f 下一个是什么归一化f 之后/之前的浮点数。
通过一些调整,提取尾数和指数,我有:
next_normalized(double&){
if mantissa is not all ones
maximally denormalize while maintaining equality
add 1 to mantissa
normalize
else
check overflow
set mantissa to 1
add (mantissa size in bits) to exponent.
endif
}
但除了这样做之外,还可以通过浮点运算来完成吗?
As
std::numeric_limits<double>::epsilon()
只是“邻域”中的误差差为 1。 - 例如:
normalized(d+=std::numeric_limits<double>::epsilon()) = d for d large
这似乎更像是错误率而不是错误差异,因此我天真的直觉是
(1.+std::numeric_limits<double>::epsilon())*f //should be the next.
And
(1.-std::numeric_limits<double>::epsilon())*f //should be the previous.
我特别有 3 个问题,是否有人做过以下任何一项(对于 IEEE754):
1)这个问题的错误分析了吗?
2)证明(或可以证明)对于任意归一化双D
(1.+std::numeric_limits<double>::epsilon())*d != d ?
3)证明对于任意归一化双数 d 不存在双 f 使得
d < f < (1.+std::numeric_limits<double>::epsilon())*d ?