找回密码
 欢迎注册
楼主: 无心人

[分享] 常用数学软件库分享

[复制链接]
发表于 2009-6-2 07:47:30 | 显示全部楼层
啊,GMP 4.3.3 都出来了?
我怎么记得前几天还是 4.3.1?
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2009-6-2 07:56:23 | 显示全部楼层
是4.3.1
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2009-6-2 08:03:53 | 显示全部楼层
通过google找到了那个编译错误的问题.是Makefile里面一个小错误.
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2009-6-2 10:30:03 | 显示全部楼层
总算弄好了.写了第一个测试程序,发现了不少问题.
  1. #include <LiDIA/rational_factorization.h>
  2. #include <iostream.h>
  3. using namespace LiDIA;
  4. using namespace std;

  5. #define N 100
  6. int main()
  7. {
  8.     bigrational x;
  9.     int i;
  10.     rational_factorization f;
  11.     x=1;
  12.     for(i=1;i<=N;i++)x*=i;
  13.     f.assign(x);
  14.     f.factor();
  15.     cout << f;
  16. }
复制代码
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
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2009-6-3 09:03:30 | 显示全部楼层
我的在cygwin下编译的,依赖cygwin的环境,你用不了
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2009-6-3 15:53:07 | 显示全部楼层
呵呵,昨天试着写LiDIA程序,结果写出了一个Bug,怎么也找不到.
今天将LiDIA重新编译成调试版本,终于找出bug了,和大家分享一下,是C++使用的Bug

LiDIA里面如果要使用代数数,需要先初始化一个number_field对象,用来指明代数数满足的方程的根
比如我们不可约方程$x^3+x+1=0$的根为a,而我们要使用域Q[a]中的代数数.
那么我们可以先定义多项式(或整数数组),比如我们可以用

  1. base_vector<bigint> n(4);
  2. n[0]=1,n[1]=1,n[3]=1;
  3. number_field F(n,3);
  4. base_vector<bigint> m(3);
  5. m[1]=1;
  6. alg_number a(m);///a is the root
  7. a=a*a+1;
  8. 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-4.3.2.zip (206.58 KB, 下载次数: 4)

GMP-5.0.0
gmp-5.0.0.zip (253.8 KB, 下载次数: 5)

下面的是用GCC 4.4.0重新编译的
gmp-4.3.2_gcc4.4.zip (207.14 KB, 下载次数: 2)

gmp-5.0.0_gcc4.4.zip (253.24 KB, 下载次数: 4)

评分

参与人数 2贡献 +8 鲜花 +8 收起 理由
wayne + 5 + 5
gxqcn + 3 + 3 谢谢编译windows版,新鲜出炉。

查看全部评分

毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 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上测试么?
注释掉,总不好吧
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

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

GMT+8, 2024-3-29 15:23 , Processed in 0.099542 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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