无心人 发表于 2008-10-17 13:23:56

如果程序没有错误,我想我以移位代替除法的设想就是不好实现的了

无心人 发表于 2008-10-17 16:01:52

:)

中午糊涂了
并不需要计算到多少位的
比如10000
只要计算到1/2^64以上
每次只考虑64位的数字就可以了
同样的任何10^k都可以计算出一个移位序列
且找到一个较合适的二进制块长度
这个块长度最好是64的倍数

无心人 发表于 2008-10-17 16:03:56

如果按64位计算
则1/10000取14 15 17 21 22 24 25 27 28 29 33 35 36 37 39 41 42 46 47 48 52 57 58 61 63
就可以了,共25个项,处理好的话,可以在64步骤内完成

gxqcn 发表于 2008-10-17 19:35:38

不好意思,后面几帖读了几遍,但仍不明就里。:L

无心人 发表于 2008-10-17 19:38:17

:lol

就当作我自言自语吧
我想我说的有点无法实现了

所以可能要回归你们算法的思想

gxqcn 发表于 2008-10-17 19:43:08

我的意思是没看能懂你的程序,也不明白你这么做的出发点和目的,无限困惑中。。。

无心人 发表于 2008-10-17 19:49:26

:)

我不是说想用移位代替除法么?
我那里是能得到一个2^32内整数的倒数
的二进制表示啊
输出的是二进制小数的位是1的
以小数点右边第一位索引是1
的位的索引

原理是十进制小数转二进制
只要不断乘以2
有进位到个位
表示当前bit是1
否则是0
可以得到无限精度的数字

gxqcn 发表于 2008-10-17 19:55:17

似乎不划算,效率可能成问题。

无心人 发表于 2008-10-17 19:58:31

你的意思是这么做进制转换不划算
还是这么做除法不划算

另外,移位的速度要远远大于加法
这么说吧
数据在内存的复制操作如果时间是1
则移位就应该是1.5
加法则在4以上
乘法在36以上了

G-Spider 发表于 2013-6-2 21:55:53

快速求大整数关于 2^n 的模逆
应该可以用到这里来,这个大整数可以限定在1~2^32-1的奇数。(偶数移位一下)
例如:
3x≡1 (mod 2^32)
得到2863311531
有120/3转化为120*2863311531 (mod 2^32)=40
gmp倒是这么用的,比较好奇,如何快速得到这个逆元。
页: 1 2 [3]
查看完整版本: B计划之二进制十进制相互转化算法