浮点运算符正确舍入实现

时间:2015-05-08 09:42:08

标签: floating-point precision

我在C中实现浮点库,基本上它是基于IEEE标准的。我已经开始添加。

我理解四舍五入有一些问题。

也许一个例子可以帮助

function ChangeText()
        {
            var parm = document.getElementById("mySelection");
            document.getElementById('lbltxt').innerHTML = parm.options[parm.selectedIndex].text;
            window.location.hash = "#" + parm.value;
        }

在上文中,x = -3.652248e-11 y = 1.263346e-10 Cz = 8.981213e-11 Mz = 8.981214e-11 Cz = 8.98121e-11 Mz = 8.98121e-11 x = ae20a0a7 y = 2f0ae808 Cf = 2ec57fbc Mf = 2ec57fbd Cz = 457fbc Mz = 457fbd Ce = 5d Me = 5d x是随机输入值,y是C运算符Cz的结果,最后+是结果我的实施。

MzCf是最终结果的位代表。正如你所看到的,最后一点是不同的,我不明白为什么。我从浮点运算手册中获取了我的实现灵感。

我想,我不明白,实际上是如何进行舍入。我的加法算法基于身份

Mf

如果我将数量命名为

x + y = (-1)^{sx}2^Ex(|x| + (-1)^(sx xor sy) |y| 2^{Ey-Ex})

基本上,当我需要使用左移位对结果进行后标准化时会出现问题,在我的情况下要小心|z| = (|x| + (-1)^(sx xor sy) |y| 2^{Ey-Ex}) 始终为正。在这种情况下,应该采用哪种舍入技术?

0 个答案:

没有答案