- 注册时间
- 2010-7-23
- 最后登录
- 1970-1-1
- 威望
- 星
- 金币
- 枚
- 贡献
- 分
- 经验
- 点
- 鲜花
- 朵
- 魅力
- 点
- 上传
- 次
- 下载
- 次
- 积分
- 851
- 在线时间
- 小时
|
楼主 |
发表于 2010-8-6 20:22:10
|
显示全部楼层
FcHugeCalc重新进行了更新,仍然使用1#的下载地址(需重新下载OpenFC)。
虽然函数并没有增加很多,但程序框架已较为完整,以后剩下的基本是体力活了。
函数名已更新,最新的说明如下:
=====================================
Forcal扩展库之FcHugeCalc:郭先强超大整数完全精度快速算法库
=====================================
用法:
1、下载OpenFC,无需安装,仅需按readme设置好。
2、复制FcHugeCalc32W.dll和HugeCalc.dll两个文件到文件夹“OpenFC\dll”。
3、打开工作区文件“OpenFC.ini”,在#LOAD{... ...}中添加如下行:
"dll\FcHugeCalc32W.dll" //郭先强超大整数完全精度快速算法库
4、执行“设置->重载动态库扩展”。
5、可能需要注册后才能正常使用,参考“HugeCalc.chm”。
=====================================
当前可用的函数:
1、HugeCalc::SetHCMax(20000):设置最多可用的HugeCalc对象,默认最多10000个HugeCalc对象
2、HugeCalc::DelAllHC():销毁所有的HugeCalc对象
3、HugeCalc::NowHCNum(100):查看当前存在,尚未销毁的HugeCalc对象,最多显示100个对象
4、HugeCalc::NewHC(HugeCalc::HI)、HugeCalc::NewHC(HugeCalc::HIX)、HugeCalc::NewHC(HugeCalc::VUI32):申请HugeInt对象、申请HugeIntX对象、申请VECTOR_UINT32对象
5、HugeCalc::DelHC(p):销毁HugeCalc对象p,p是由函数newhc返回的对象指针
6、HugeCalc::SetStr(p,"123"):给HugeCalc对象p赋值为123
HugeCalc::SetNum(p,123):给HugeCalc对象p赋值为123
HugeCalc::Set(p,q):给HugeCalc对象p赋值为q,q也是HugeCalc对象
7、HugeCalc::Show(p):输出HugeCalc对象p的内容
8、HugeCalc::Add(a,b,c):计算a=b+c,在函数oo可直接用运算符计算b+c,返回一个临时对象
9、HugeCalc::Sub(a,b,c):计算a=b-c,在函数oo可直接用运算符计算b-c,返回一个临时对象
10、HugeCalc::Mul(a,b,c):计算a=b*c,在函数oo可直接用运算符计算b*c,返回一个临时对象
11、HugeCalc::Div(a,b,c):计算a=b/c,在函数oo可直接用运算符计算b/c,返回一个临时对象
12、HugeCalc::Mod(a,b,c):计算a=b%c,在函数oo可直接用运算符计算b%c,返回一个临时对象
13、HugeCalc::Pow(a,b,c):计算a=b^c,a、b为HugeCalc对象,c为整数;在函数oo中可使用Pow(b,c),返回一个临时对象
14、HugeCalc::Fac(a,100):计算a=100!
15、HugeCalc::NextPrime(a,b):计算a=比b大的最小的素数
16、HugeCalc::GT(a,b):关系运算a>b,在函数oo可直接使用此关系运算符,返回逻辑值
17、HugeCalc::GE(a,b):关系运算a>=b,在函数oo可直接使用此关系运算符,返回逻辑值
18、HugeCalc::LT(a,b):关系运算a<b,在函数oo可直接使用此关系运算符,返回逻辑值
19、HugeCalc::LE(a,b):关系运算a<=b,在函数oo可直接使用此关系运算符,返回逻辑值
20、HugeCalc::EQ(a,b):关系运算a==b,在函数oo可直接使用此关系运算符,返回逻辑值
21、HugeCalc::NE(a,b):关系运算a!=b,在函数oo可直接使用此关系运算符,返回逻辑值
=====================================
例子1:- SetTalk[false]; //关闭计算结果及运行错误输出,并不阻止函数的输出
- !using["HugeCalc"]; //使用命名空间HugeCalc,可简化函数的使用
- mvar: //使用隐含模块变量声明方式
- i: printff["\r\n"], //输出一个换行符
- a=NewHC[HI].SetStr["1111111111111111111111111111111"].free[], //申请HugeInt对象并赋值,自动销毁该对象
- b=NewHC[HI].SetStr["11111111112222222222222"].free[], //申请HugeInt对象并赋值,自动销毁该对象
- c=NewHC[HI].Add[a,b].Show[].free[], //申请HugeInt对象c,计算c=a+b并输出结果,自动销毁该对象
- printff["\r\n"], //输出一个换行符
- oo{[a+(b+c)+(a+b)].Show[]}; //函数oo中的运算符是重载的,计算a+(b+c)+(a+b)并输出结果
复制代码 -------------------------------------
例子2:- SetTalk[false];
- !using["HugeCalc"];
- mvar:
- i: printff["\r\n"],
- a=NewHC[HI].SetStr["1111111111111111111111111111111"].free[],
- b=NewHC[HI].SetNum[1111111122222222].free[],
- oo{[c=a%b, a+(b-a%b)*(a+b/c)].Show[]};
复制代码 -------------------------------------
例子3:- !using["HugeCalc"];
- mvar:
- i: oo{
- printff["\r\n"],
- //函数oofree[]指出由oo函数销毁该对象
- a=NewHC[HI].SetStr["1111111111111111111111111111111"].oofree[],
- b=NewHC[HI].SetStr["11111111112222222222222"].oofree[],
- {d=[a*b], c=Pow(a,10), a+(d-Pow(a,50)%b)*(c+c/b)}.Show[]
- };
复制代码 -------------------------------------
例子4:- !using["HugeCalc"];
- mvar:
- t0=sys::clock();
- i: printff["\r\n"],
- a=NewHC[HI].SetNum[10000000].free[],
- b=NewHC[HI].SetNum[20000000].free[],
- c=NewHC[HI].SetNum[0].free[],
- aa=NewHC[HI].free[],
- i=0, a.NextPrime[a], aa.NextPrime[a],
- while{LE(aa,b),
- oo{
- dd=[a*aa], cc=Pow(aa,50),
- c.Set[c+Pow(a,100)*(a+aa)*(a*aa%(a+b))+(c+cc)/dd]
- },
- a.Set[aa], aa.NextPrime[a],
- i++
- },
- c.Show(),
- i;
- [sys::clock()-t0]/1000;
复制代码 =====================================
forcal 2010.8.6 |
|