数学研发论坛

 找回密码
 欢迎注册
查看: 629|回复: 5

[讨论] 2个Int64 组成的Int128,如何高效的除以Int64。

[复制链接]
发表于 2018-2-21 11:36:28 | 显示全部楼层 |阅读模式

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

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

x
struct int128
{
  __int64 hi;
  __int64 lo;
};

请问如何高效的实现:int128 / int64

评分

参与人数 1金币 +20 收起 理由
gxqcn + 20 首帖奖励,欢迎常来。

查看全部评分

毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2018-2-21 11:53:22 | 显示全部楼层
估计得用汇编:
将低字节 mov 进 rax,高字节 mov 进 rdx,
用 div 指令,商在 rdx, 余数在 rax
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2018-2-21 12:23:35 | 显示全部楼层
我这个应用是开发的移动应用,要考虑到跨平台特性,不能使用汇编指令呢。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2018-2-21 17:14:34 | 显示全部楼层
估计 64bit 的除法还是支持的。
可以考虑:
1、如果被除数为偶数,可将被除数与除数同时右移位,直到被除数为奇数为止;
2、高位除以除数,得商及余数,而余数也可看作是新被除数的高位;
3、将新被除数与除数同时右移位,直到被除数位数也为64位,得到商和余数;
4、上述算法部分是试算逼近,需适当修正。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2018-2-21 21:28:18 | 显示全部楼层
gxqcn 发表于 2018-2-21 17:14
估计 64bit 的除法还是支持的。
可以考虑:
1、如果被除数为偶数,可将被除数与除数同时右移位,直到被除 ...

大哥,能否写一个简单的算法流程,听不懂呀。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2018-2-26 21:02:01 | 显示全部楼层
本帖最后由 只是呼吸 于 2018-2-26 21:05 编辑

如果你用的是64位的计算机,可能64位的div指令就能用,就像站长gxqcn说的那样。

如果你用的是32位的计算机,要计算这个除法,就只好用估商法了,在这个论坛中有c语言写的源码,那个源码是针对无限多数字的,是十进制的,你把源码改一改、优化一下,最好改成汇编,不会差的。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

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

GMT+8, 2019-3-22 20:04 , Processed in 0.090208 second(s), 17 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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