KeyTo9_Fans 发表于 2019-8-1 20:46:50

128比特的定点实数如何求倒数?

一个$0.5$到$1$之间的实数$r$,可以用一个$128$比特的整数$2^128*r$来表示。

于是$1/r$的范围是$1$到$2$之间,也可以用一个$128$比特的整数$2^127*1/r$来表示。

我的问题是,给定$2^128*r$的高$64$位和低$64$位,如何最高效地求出$2^127*1/r$的高$64$位和低$64$位?

这个倒数运算实现之后,双精度的定点除法运算就不难实现了。

mathe 发表于 2019-8-6 13:00:16

我们可以先根据r的高64比特,求出1/r的高64比特h
然后利用迭代式h=h(2-hr)来进行128比特高精度乘法进行一次迭代即可,精度可以提高一倍

Ickiverar 发表于 2019-12-10 23:21:35

可以看看我这个帖子里的附件 https://bbs.emath.ac.cn/thread-9552-1-1.html
里面给出了求 128 位数的 65 位逆(最高位一定是1,所以只保存低64位)的汇编过程。
思想是,先用高9位查表得出10位的逆,然后不断牛顿迭代,迭出65位的逆。
至于你想要的128位,再迭代一次即可。我建议你将逆定义为 floor((2^256-1)/x),这个数一定是首位为1的129位数,可以只保存低128位。
页: [1]
查看完整版本: 128比特的定点实数如何求倒数?