找回密码
 欢迎注册
楼主: forcal

[讨论] 用Forcal封装HugeCalc大数算法库

[复制链接]
发表于 2010-8-5 10:00:09 | 显示全部楼层
Add、Sub 分别对应于运算符“+=”、“-=”,这已是内部最高效的运算方式,
如果是递增或递减,可用“++”、“--”,分前置后后置两种。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2010-8-5 10:05:02 | 显示全部楼层
“+=”不是这种运算吗:a=a+b,即a+=b。
但我想实现a=b+c,最高效的函数是什么?如果用重载的运算符似乎会产生临时变量。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2010-8-5 10:21:53 | 显示全部楼层
a=b+c,最高效的方式是:(a=b)+=c,或 (a=c)+=b

如果b里的值无需保留,还可更高效:a.Swap(b+=c)
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2010-8-5 10:33:09 | 显示全部楼层
a=b+c,最高效的方式是:(a=b)+=c,或 (a=c)+=b

如果b里的值无需保留,还可更高效:a.Swap(b+=c)
gxqcn 发表于 2010-8-5 10:21

(a=b)+=c 及 a.Swap(b+=c)  会比 Add(a,b,c) 形式更高效吗?这个倒没有测试过,呵呵。
在脚本中这些运算的效率差别是很小的,我只选择效率最高的一种就可以了。
为了不产生临时变量,看来(a=b)+=c 是一个不错的选择。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2010-8-5 10:40:51 | 显示全部楼层
Add(a,b,c) 是 C 的调用方式,当前 HugeCalc 的 C 导出接口是 C++ 导出接口的再包装,
所以用它反而不高效。

而且,调用 C 接口,内部会自动检测其入参的合法性(会全程跟踪鉴别,以便自动销毁用户未释放的对象),多多少少会损失点效率。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2010-8-5 10:48:18 | 显示全部楼层
还有问题1,在脚本中需要实现的HugeCalc对象已经有HugeInt、HugeIntX、CVECTOR_UINT32 ,再增加CRadixConverter,还有必要实现其他对象吗?是否已经足够?

除了HugeInt、HugeIntX和CVECTOR_UINT32 ,能否简单介绍一下HugeCalc中的其他结构或对象的用途?枚举常量似乎不必单独作为对象来实现。

另外,似乎目前HugeCalc对32位数的运算支持比较好,而Forcal整数是64位,需要进行一些转换。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2010-8-5 10:57:15 | 显示全部楼层
CRadixConverter 不必用,它仅仅是个高级进制转换器,更多的是内部调用,
把它导出来,并增强了功能(各种进制之间可相互快速转化),只是更多的方便高级用户而已。

HugeCalc 有部分函数是直接支持64位的,要想全面支持要等x64版的HugeCalc了。

枚举常量似乎不必单独作为对象来实现”这句话没明白,哪个枚举常量作为对象来实现了?
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2010-8-5 11:07:41 | 显示全部楼层
“枚举常量似乎不必单独作为对象来实现”这句话没明白,哪个枚举常量作为对象来实现了? gxqcn 发表于 2010-8-5 10:57

看到HugeCalc 中定义了一些enum ,我的意思是脚本中可不出现这些enum ,若用到用相关函数设置即可。当然,定义成相关的常量也可以。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2010-8-5 11:23:22 | 显示全部楼层
枚举与普通常量的区别在于:前者可取值范围固定,内部无需参数合法性检查。
当然,你定义成相关的常量也可以。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2010-8-5 11:47:02 | 显示全部楼层
HugeCalc 可自动管理临时变量,Forcal脚本运算代码也将产生一些临时变量,不知将HugeCalc 中的临时变量作为Forcal的临时变量是否可以?

具体来说,脚本中有a+b产生一个临时变量,我直接用HugeCalc 中的a+b产生的临时变量是否可以呢?

HugeCalc 中的a+b产生的临时变量一般何时销毁?若在Forcal中临时变量生命周期结束前销毁肯定是不行的。能否控制HugeCalc 临时变量的生命周期?

另外,(a+b)*(a+b) 共产生3个临时变量,但有两个是(a+b)产生的,这两个临时变量的内存地址是否相同?
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

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

GMT+8, 2024-4-26 17:21 , Processed in 0.043267 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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