如何找到每个双值产生较小输出的乘数?

Ano*_*ous 6 algorithm floating-point double multiplication ieee-754

你将如何找到最大的和积极的IEEE-754二进制64值C使得正,标准化的二进制值64的每一个IEEE-754产品A具有C小于A

我知道它必须接近0.999999 ......但我想找到最完美的一个.

假设圆到最近,与偶数相关.

Sne*_*tel 5

有几种实验方法; 这里有一个证明C = 1 - ?,这里?是机器精度(即,之间的距离1和最小可表示数大于1).

C < 1当然,我们知道,所以尝试是有意义的,C = 1 - ?/2因为它是下一个可表示的数字小于1.(?/2因为它C是在可[0.5, 1)表示数字的桶中.)让我们看看它是否适用于所有人A.

我将在本段中假设这一点1 <= A < 2.如果两个AAC是在"正常"区域则并不重要指数是什么,情况会与指数相同2^0.现在,这种选择C显然有用A=1,所以我们留在该地区1 < A < 2.看A = 1 + ?,我们看到AC(确切的值,而不是舍入的结果)已经大于1; 并且A = 2 - ?我们看到它小于2.这很重要,因为如果AC介于1和2之间,我们知道AC和之间的距离round(AC)(即将其四舍五入到最接近的可表示值)最多?/2.现在,如果A - AC < ?/2,那么round(AC) = A我们想要.(如果A - AC = ?/2那时它可以四舍五入地A给出正常FP舍入规则的"与偶数相关"部分,但让我们看看我们是否可以做得更好.)既然我们选择了C = 1 - ?/2,我们可以看到A - AC = A - A(1 - ?/2) = A * ?/2.因为那比?/2(记住A>1)更大,所以A远离它远离它.

但!在另外一个价值A,我们要检查是最小表示的正常价值,因为AC不是在正常范围内,因此我们的"相对距离最近的"规则不适用.而我们发现,在这种情况下A-AC,该地区恰好是机器epsilon的一半."向最近的方向发展,与平均线相关 ",并且产品回归到平等A.讨厌鬼.

通过同样的事情C = 1 - ?,我们看到了round(AC) < A,并且没有其他任何东西甚至接近于向前A(我们最终询问是否A * ? > ?/2,当然是这样).因此,妙语C = 1-?/2 几乎可以正常工作,但法线和非正规之间的界限C = 1-?会使我们陷入困境,并使我们进入终点区域.