免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: 发仔很忙
打印 上一主题 下一主题

[算法] 不用除法怎么求A/3 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2012-10-22 04:26 |只看该作者
Ager 发表于 2012-10-22 02:03
友情提醒

楼主在一楼其实只说了不能用除法;
至于乘法和除法的实现是另外一个问题了。

论坛徽章:
0
12 [报告]
发表于 2012-10-22 05:42 |只看该作者
Ager 发表于 2012-10-22 02:03
友情提醒

顺便问下,昨天是什么节日啊?在超市有奇怪的松树买,而且晚上邻居在唱歌闹腾了好一阵,不像是普通的周末。

论坛徽章:
0
13 [报告]
发表于 2012-10-22 10:19 |只看该作者
回复 6# Ager


    这个只能算整除的吧?

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
14 [报告]
发表于 2012-10-22 11:01 |只看该作者
GMP有段很NB的代码,求取64位无符号整数对2 ^ 64的乘法逆元
GMP里面涉及除法运算一般都引用这段代码,商就是被除数乘以除数的乘法逆元的结果的高64位
下面这段就是引自mpn/invert_limb.asm的一段注释,数字单位是指令周期,越小越快

C            cycles/limb (approx)       div
C K8,K9:         48                      71
C K10:           48                      77
C P4:           135                     161
C P6 core2:      69                     116
C P6 corei7:     55                      89
C P6 atom:      129                     191

比CPU内置的除法器要快20% ~ 50%左右,详细代码我就不贴了,下载GMP的代码自己看去
涉及的运算是:位移,查表(引用数组),加法,乘法

论坛徽章:
3
摩羯座
日期:2013-11-12 20:06:19午马
日期:2013-11-27 16:35:55双鱼座
日期:2014-04-04 19:02:30
15 [报告]
发表于 2012-10-22 12:50 |只看该作者
Ager 发表于 2012-10-21 22:48
经过优化,还可以有一个超级简单的,更加清爽。同上面那个一样,也是用到了一些数学知识,呵呵……经过32-b ...


不懂这个数学知识,能否解释下?

BTW: 大神,你确定这能得到正确的结果吗?

论坛徽章:
11
摩羯座
日期:2013-09-16 11:10:272015亚冠之阿尔萨德
日期:2015-06-12 22:53:29午马
日期:2014-04-15 11:08:53亥猪
日期:2014-03-02 23:46:35申猴
日期:2013-12-06 22:07:00亥猪
日期:2013-11-28 12:03:13双鱼座
日期:2013-11-21 14:43:56亥猪
日期:2013-10-23 10:55:49处女座
日期:2013-10-17 18:15:43午马
日期:2013-09-27 17:40:4215-16赛季CBA联赛之青岛
日期:2016-06-22 00:45:55
16 [报告]
发表于 2012-10-22 14:49 |只看该作者
_Rayx 发表于 2012-10-22 10:19
回复 6# Ager

这个只能算整除的吧?


是唉。

论坛徽章:
0
17 [报告]
发表于 2012-10-22 14:56 |只看该作者
mark liuming

论坛徽章:
0
18 [报告]
发表于 2012-10-22 23:26 |只看该作者
回复 6# Ager

额,这个代码虽然很简单,但是我没看懂


   

论坛徽章:
11
摩羯座
日期:2013-09-16 11:10:272015亚冠之阿尔萨德
日期:2015-06-12 22:53:29午马
日期:2014-04-15 11:08:53亥猪
日期:2014-03-02 23:46:35申猴
日期:2013-12-06 22:07:00亥猪
日期:2013-11-28 12:03:13双鱼座
日期:2013-11-21 14:43:56亥猪
日期:2013-10-23 10:55:49处女座
日期:2013-10-17 18:15:43午马
日期:2013-09-27 17:40:4215-16赛季CBA联赛之青岛
日期:2016-06-22 00:45:55
19 [报告]
发表于 2012-10-22 23:53 |只看该作者
本帖最后由 Ager 于 2012-10-23 00:00 编辑

@mci2004
@发仔很忙

发仔很忙 发表于 2012-10-22 23:26
回复 6# Ager

额,这个代码虽然很简单,但是我没看懂


这样吧 。。。你不妨把这个函数,跟C语言本身所提供的除法运算符(作用在整数上),(将运行结果)比较一下。

在你的平台环境中,实实在在地跑一下,看看结果的正确度到底几何。

确定在结果的正确性上没问题之后,我再来解释原理。这样,你看妥否?

呵呵 :)

论坛徽章:
0
20 [报告]
发表于 2012-10-23 08:18 |只看该作者
回复 6# Ager

额,这个数据出错的



结果如下:



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

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP