数学研发论坛

 找回密码
 欢迎注册
查看: 1042|回复: 3

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

[复制链接]
发表于 2019-8-1 20:46:50 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?欢迎注册

x
一个$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$位?

这个倒数运算实现之后,双精度的定点除法运算就不难实现了。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2019-8-6 13:00:16 | 显示全部楼层
我们可以先根据r的高64比特,求出1/r的高64比特h
然后利用迭代式h=h(2-hr)来进行128比特高精度乘法进行一次迭代即可,精度可以提高一倍
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 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位。

点评

还有,双精度的定点除法其实不需要双精度的逆,单精度就行了。在我的帖子里已经给出了三精度除以双精度的严格算法,即使是4精度除以双精度数,也只需要做两次这个算法就行了。  发表于 2019-12-10 23:30
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

小黑屋|手机版|数学研发网 ( 苏ICP备07505100号 )

GMT+8, 2020-7-13 01:05 , Processed in 0.148919 second(s), 20 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表