这是一个忠实的乘法功能,当我从互联网上跑过来时,我得到了一个代码。 但它与预期数据有很大不同。 如何修改以使此代码具有正确性?
for (i=1; i=<8; i++)
{
if (x > 0) {
x = x - pow(2,-i);
z = z + y*pow(2,-i);
}
else{
x = x + pow(2,-i);
z = z - y* pow(2,-i);
}
如果我使用x = 7运行,则y = 8,则z = 7.000而不是56。
错误点是什么?
我得到了正确的答案,但Thnaks,我已经检查了它的工作范围。顺便问一下,有没有任何扩展范围算法?如何进行范围扩展?
答案 0 :(得分:1)
看起来你从this paper获取此功能(没有归属!)。代码中充满了明显的拼写错误,但如果您阅读下面的段落,则说明:
此计算假设 x和y的小数范围从-1到1 。只要允许小数点浮动,该算法对其他范围有效。通过一些扩展,该算法可以很好地处理浮点数据。
带回家留言:请务必阅读您计划使用的任何代码的随附文档,特别是如果您不了解它的工作原理。