hrefspace

 找回密码
 立即注册
搜索
热搜: PHP PS 程序设计
查看: 550|回复: 2

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

[复制链接]

535

主题

535

帖子

1629

积分

版主

Rank: 7Rank: 7Rank: 7

积分
1629
发表于 2024-4-10 16:01:19 | 显示全部楼层 |阅读模式
一个$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$位?

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

使用道具 举报

0

主题

195

帖子

38

积分

新手上路

Rank: 1

积分
38
发表于 2024-4-10 16:01:33 | 显示全部楼层
我们可以先根据r的高64比特,求出1/r的高64比特h
然后利用迭代式h=h(2-hr)来进行128比特高精度乘法进行一次迭代即可,精度可以提高一倍
回复

使用道具 举报

0

主题

185

帖子

29

积分

新手上路

Rank: 1

积分
29
发表于 2024-4-10 16:02:13 | 显示全部楼层
可以看看我这个帖子里的附件 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位。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|hrefspace

GMT+8, 2024-12-4 16:32 , Processed in 0.057087 second(s), 21 queries .

Powered by hrefspace X3.4 Licensed

Copyright © 2022, hrefspace.

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