【发布时间】:2015-06-19 09:39:44
【问题描述】:
我需要为通用浮点格式实现数字递归平方根,例如 exp_size + mant_size + 1
我基本上遵循了这里建议的实现 handbook of floating point arithmetic在浮点运算符的软件实现中。
我试图测试我的实现(不是详尽的测试),基本上对于像 32 位这样的格式,它看起来工作正常,而对于像尾数 = 10、指数 = 5 的输入 x = 0.25 格式而不是给我 0.5 它显然给了我 0.707031。
所以我一直在徘徊,如果对于小格式,数字重复方法是否有一些限制,或者......只是我的实现很糟糕......
希望你能帮帮我……从 0 开始实现这些东西很痛苦……
【问题讨论】:
-
FPU 计算是在尾数和指数的较高位数上完成的(i8087+ FPU 的内部数字表示为 80 位),然后将结果截断到输出。如果你模仿这个,你就会得到正确的答案。如果你不想这样,你可以使用 bin 搜索方法(由于需要乘法,它有点慢,但结果应该更精确)
-
我不确定你在说什么。但基本上“我的”方法是计算 mantissa_size 数字,mantissa_size 数字 + 1,这是因为平方根需要 1 位数字位才能正确舍入。但是对我来说这听起来有点奇怪,对于 10 位尾数精度(例如)和 5 的指数,我没有得到输入 0.25 的正确答案。
标签: algorithm floating-point numerical-methods