我在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
的结果,最后+
是结果我的实施。
Mz
和Cf
是最终结果的位代表。正如你所看到的,最后一点是不同的,我不明白为什么。我从浮点运算手册中获取了我的实现灵感。
我想,我不明白,实际上是如何进行舍入。我的加法算法基于身份
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})
始终为正。在这种情况下,应该采用哪种舍入技术?