forcal 发表于 2010-10-28 13:51:22


不是的,是 HugeCalc 内含了反跟踪反破解技术。
gxqcn 发表于 2010-10-27 07:58 http://bbs.emath.ac.cn/images/common/back.gif
那是发生冲突了,呵呵!
但我这个窗口若弹不出来,就无法退出一些较长时间的循环。例如不小心写了一个无限循环,想要退出它。
有什么两全的办法吗?
我的窗口线程仅检测执行Forcal函数的线程是否还在运行。

gxqcn 发表于 2010-10-28 14:43:32

你确认是调用 HugeCalc 后无法弹出该窗口吗?
那么请试一试:在加载 HugeCalc 成功后,再创建该窗口线程。。。

forcal 发表于 2010-10-28 16:04:55

你确认是调用 HugeCalc 后无法弹出该窗口吗?
那么请试一试:在加载 HugeCalc 成功后,再创建该窗口线程。。。
gxqcn 发表于 2010-10-28 14:43 http://bbs.emath.ac.cn/images/common/back.gif
这个窗口的表现类似于windows的计算器,当计算时间较长时就弹出一个窗口要求用户确认是否结束计算。

此窗口仅在需要时(即Forcal正在计算且时间较长,约3~5秒后创建)才创建,故加载 HugeCalc 成功后并不立即创建,当执行Forcal函数几秒后才创建。

发现加载HugeCalc 后该窗口就不出现了。

forcal 发表于 2010-10-28 16:14:22

打扰郭先生了,问题找到了,与HugeCalc 无关,是我这个窗口的问题。

gxqcn 发表于 2010-10-28 16:27:39

43# forcal

那比较奇怪了。
HugeCalc 仅仅在加载初期进行反跟踪反破解,而后就一切正常了。

你修改下线程,不弹出窗口,看是否仍在激活状态?

forcal 发表于 2010-10-28 18:52:06

45# gxqcn
这个问题若不是封装HugeCalc,可能还得晚些时候发现,要谢谢HugeCalc!呵呵。

我使用FcHugeCalc的过程是这样的:打开OpenFC(Forcal演示程序),此时使用了默认工作区文件,而默认工作区文件中没有加载FcHugeCalc;然后我打开另一个含FcHugeCalc的工作区文件,重新设置工作区,这样OpenFC要关闭所有文件、窗口等,再重新打开,有一个与监视窗口相关的变量没有重新设置,故监视窗口出不来了。

现已修正此bug。

G-Spider 发表于 2010-10-29 11:58:53

forcal 兄,你的forcal32w在我的机子上用不了,说什么:

是不是操作系统的问题,这台是Win7,不过在WinXp上装过没问题
还有如何使用下面的代码?:)
!using["math","sys"];
(:a,b,k,t0)=
t0=clock(),
oo{
a=rand, b=rand,
k=a*b//矩阵乘
},
/1000;

forcal 发表于 2010-10-29 16:06:18

forcal 兄,你的forcal32w在我的机子上用不了,说什么:
2270
是不是操作系统的问题,这台是Win7,不过在WinXp上装过没问题
还有如何使用下面的代码?:)
!using["math","sys"];
(:a,b,k,t0)=
t0=clock(),
oo{ ...
G-Spider 发表于 2010-10-29 11:58 http://bbs.emath.ac.cn/images/common/back.gif
AutoMfc是我写的一个可自动运行扩展名为“afc”的文件的小程序,有一些注册表操作,以建立“afc”文件和AutoMfc之间的关联,没有在win7(我目前没有64位系统)下测试过。

OpenFC是目前最好的演示程序,可演示以上代码,似乎在win7下可以运行。
OpenFC下载:http://www.forcal.net/xiazai/forcal9/openfc32w.rar

forcal 发表于 2010-11-5 22:41:29

计算下列式子:
1:1! + 2! + 3! + ... ... + 1000!
2:1! *2! *3! * ... ... *1000!

Forcal+HugeCalc代码:!using["HugeCalc"];
i: main(:i,a,sum,pro)=
   oo{a=HI(0),sum=HI(0),pro=HI(1)},
   i=0,(++i<=1000).while{oo{sum.=sum+a.Fac(i), pro.=pro*a}},
   printff["\r\nsum=\r\n"], sum.Show(),
   printff["\r\npro=\r\n"], pro.Show();耗时约11~12秒。

Mathematica 、maple、matlab等如何呢?

gxqcn 发表于 2010-11-10 16:31:07

LS 的题目就题论题来说,还可以有很多优化,有些是数学算法层面上的,
有些则可以通过调用 HugeCalc 导出的高效函数而提速,
比如,大家可能不常用的函数:Product(..)、SumsOfLikePowers(..)#include <ostream.h>
#include <iostream.h>

#include "../../../HugeCalc_API/CppAPI/Include/HugeCalc.h"    // 公共接口
#include "../../../HugeCalc_API/CppAPI/Include/HugeInt.h"    // 10进制系统

#pragma message( "automatic link to ../../../HugeCalc_API/CppAPI/Lib/HugeCalc.lib" )
#pragma comment( lib, "../../../HugeCalc_API/CppAPI/Lib/HugeCalc.lib" )

int main(int argc, char* argv[])
{
    CHugeInt hi, sum, pro;
    CHugeInt * hi_prt;

    HugeCalc::EnableTimer( TRUE );
    HugeCalc::ResetTimer();

    hi = 1;
    hi_prt = &hi;
    for ( UINT32 i=1; i<1000; ++i )
    {
      hi = hi * (i+1);
      hi_prt = &hi;
    }

    CVECTOR_HHUGEINT vhi( (const class CHugeInt **const)hi_prt, 1000 );
    sum.SumsOfLikePowers( vhi, 1 );
    pro.SumsOfLikePowers( vhi, 0 );

//cout << "sum = " << sum.GetStr() << endl;
//cout << "pro = " << pro.GetStr() << endl;

    cout << HugeCalc::GetTimerStr() << endl;

    return 0;
}如果不输出结果,在我的机器上仅需 0.637215 s;
输出结果,则总耗时 0.881359 s;
如果是输出到 DOS 屏幕,需要的时间略多点,共需要 4.693113 s
页: 1 2 3 4 [5] 6
查看完整版本: 用Forcal封装HugeCalc大数算法库