gxqcn
发表于 2009-6-2 07:47:30
啊,GMP 4.3.3 都出来了?
我怎么记得前几天还是 4.3.1?
mathe
发表于 2009-6-2 07:56:23
是4.3.1
mathe
发表于 2009-6-2 08:03:53
通过google找到了那个编译错误的问题.是Makefile里面一个小错误.
mathe
发表于 2009-6-2 10:30:03
总算弄好了.写了第一个测试程序,发现了不少问题.#include <LiDIA/rational_factorization.h>
#include <iostream.h>
using namespace LiDIA;
using namespace std;
#define N 100
int main()
{
bigrational x;
int i;
rational_factorization f;
x=1;
for(i=1;i<=N;i++)x*=i;
f.assign(x);
f.factor();
cout << f;
}
1.开始我不知道需要添加using namespace LiDIA;编译时发现无论如何也找不到bigrational的定义.好像文档里面也没有说明.查看了头文件才知道.
2.编译时,开始我使用命令
g++ -O3 test.cc -lgmp -lLiDIA -o test.exe
(根据LiDIA的文档,需要同时链接gmp库)
结果报告了一大堆gmp中的函数没有找到.
然后改成
g++ -O3 test.cc -lLiDIA -lgmp -o test.exe
结果就可以通过了,运行结果:
$ ./test.exe
[(2,97)(3,48)(5,24)(7,16)(11,9)(13,7)(17,5)(19,5)(23,4)(29,3)(31,3)(37,2)(41,2
)(43,2)(47,2)(53,1)(59,1)(61,1)(67,1)(71,1)(73,1)(79,1)(83,1)(89,1)(97,1)]
无心人
发表于 2009-6-3 08:58:00
谁帮我Build下4.3.1
我这里是Core2的U
MinGW不支持
希望能编译出P4和Core2两种类型的dll
mathe
发表于 2009-6-3 09:03:30
我的在cygwin下编译的,依赖cygwin的环境,你用不了:(
mathe
发表于 2009-6-3 15:53:07
呵呵,昨天试着写LiDIA程序,结果写出了一个Bug,怎么也找不到.
今天将LiDIA重新编译成调试版本,终于找出bug了,和大家分享一下,是C++使用的Bug
LiDIA里面如果要使用代数数,需要先初始化一个number_field对象,用来指明代数数满足的方程的根
比如我们不可约方程$x^3+x+1=0$的根为a,而我们要使用域Q中的代数数.
那么我们可以先定义多项式(或整数数组),比如我们可以用
base_vector<bigint> n(4);
n=1,n=1,n=1;
number_field F(n,3);
base_vector<bigint> m(3);
m=1;
alg_number a(m);///a is the root
a=a*a+1;
cout<<a;
而我犯了一个很难发现的错误,在变量申明number_field F(n,3);中我忘掉了变量的名字F.而变成了number_field (n,3).于是导致产生了number_field的一个匿名对象.而这个匿名对象在构造完毕以后会被马上析构,从而number_field等于没有初始化:(
无心人
发表于 2010-1-12 16:12:33
GMP-4.3.2
GMP-5.0.0
下面的是用GCC 4.4.0重新编译的
gxqcn
发表于 2010-1-12 16:52:48
楼上的两个版本我在VC6下调用了一下,
需要将 gmp.h 第 538 行注释掉,以及需要将 libgmp-3.dll 更名为 libgmp-3.dll.dll
测试的结果,两个版本大数乘法效率相当,在超大规模上,仍不及当前的 HugeCalc,
我测试的平台是 AMD 单核 32bit WinXP SP3。
无心人
发表于 2010-1-13 08:44:01
郭,你能在高版本的VC上测试么?
注释掉,总不好吧