好消息!HugeCalc 核心算法效率全面超出 GMP!开心,散分200!
好消息,在双核上测试,我的 HugeCalc 核心算法效率全面超出 GMP!:)
GMP HugeCalc-HI HugeCalc-HXFib[100000000]( 69424191 Bits ) 4.349451 s 3.702678 s 3.479291 sFib[200000000]( 138848382 Bits ) 9.424257 s 7.230688 s 6.871886 sFib[400000000]( 277696765 Bits ) 20.659469 s 15.330399 s 14.545750 s
// DESCRIPTION for Fib.cpp :// Defines the entry point for the console application.// 目的:测试 GMP 与 HugeCalc 两大高精度算法库核心算法效率// 因为计算 Fibonacci 本身可优化的地方不多,关键是大数乘法及大数平方,// 故,通过测试 Fibonacci 效率而检测算法库最核心的大数乘法(平方)效率。//// 设计:郭先强 ( gxqcn@163.com; HugeCalc@Gmail.com )// 日期:2008-01-03//// Web: http://www.emath.ac.cn/// BBS: http://bbs.emath.ac.cn/////////////////////////////////////////////////////////////////////////////// Project -> Setting -> C/C++ -> Code Generation --> Use run-time library:// Win32 Debug: Debug Multithreaded DLL// Win32 Release: Multithreaded DLL#include <iostream.h>#include <gmp.h>#include <HugeCalc.h> // 公共接口#include <HugeInt.h> // 10进制系统#include <HugeIntX.h> // 16进制系统#pragma message( "automatic link to .../HugeCalc_API/CppAPI/Lib/HugeCalc.lib" )#pragma comment( lib, "gmp.lib" )#pragma comment( lib, "HugeCalc.lib" )#if 0# define FIRST_INDEX 10000000L /*1e7*/#else# define FIRST_INDEX 100000000L /*1e8*/#endifint main(int argc, char* argv[]){ cout << "Call " << HugeCalc::GetVer() << endl; if ( HC_LICENSE_NONE == HugeCalc::GetLicenseLevel() ) { cout << "\r\n警告:您未通过 HugeCalc.dll 的许可认证!\r\n" \ << "\r\n解决方案可选下列方案之一:" \ << "\r\n 一、请将本程序移动到“/CopyrightByGuoXianqiang/[../]”目录下运行;" \ << "\r\n 二、或请在 HugeCalc.chm 中进行注册(一劳永逸)。" \ << endl; } else { for ( UINT32 u32Index = FIRST_INDEX; u32Index <= FIRST_INDEX * 4; u32Index <<= 1 ) { cout << "\r\n--------------------------------\r\n" << endl; cout << "Calculate Fib[" << u32Index << "]:\r\n" << endl;#if 1 // 测试 GMP { mpz_t hugeFIB; mpz_init( hugeFIB ); HugeCalc::EnableTimer( TRUE ); HugeCalc::ResetTimer(); mpz_fib_ui( hugeFIB, u32Index ); HugeCalc::EnableTimer( FALSE ); cout << "GMP used time: " << HugeCalc::GetTimerStr( FT_DOT06SEC_s ) << " ( " \ << mpz_sizeinbase( hugeFIB, 2 ) << " Bits )" << endl; mpz_clear( hugeFIB ); }#endif // 测试 HI { CHugeInt hugeFIB; HugeCalc::EnableTimer( TRUE ); HugeCalc::ResetTimer(); hugeFIB.Fibonacci( u32Index ); HugeCalc::EnableTimer( FALSE ); cout << "HI used time: " << HugeCalc::GetTimerStr( FT_DOT06SEC_s ) << " ( " \ << hugeFIB.GetDigits() << " Digits )" << endl; } // 测试 HX { CHugeIntX hugeFIB; HugeCalc::EnableTimer( TRUE ); HugeCalc::ResetTimer(); hugeFIB.Fibonacci( u32Index ); HugeCalc::EnableTimer( FALSE ); cout << "HX used time: " << HugeCalc::GetTimerStr( FT_DOT06SEC_s ) << " ( " \ << hugeFIB.GetBits() << " Bits )" << endl; } } } cout << endl; system( "pause" ); return 0;}
[解决办法]
恭喜啊 ,收分
[解决办法]
帮楼主顶下!!!!!!!!!!!1
[解决办法]
恭喜
[解决办法]
恭喜楼主
[解决办法]
楼主加油,呵呵
[解决办法]
这么多HugeCal的帖子,不过还是恭喜搂主啊!我也在搂主的数学研发论坛注册了,感觉学到了很多。真是个好论坛
[解决办法]
恭喜,顺便蹭点分.
[解决办法]
强人啊
[解决办法]
恭喜,接分!
[解决办法]
祝贺!向楼主学习!
[解决办法]
顶,接分
[解决办法]
恭喜恭喜!-_-,接分
[解决办法]
自从在我们区见过LZ讨论素数生成就感觉LZ数学很强
果然啊~
JF,同时感谢LZ的工具,密码学计算又一好东西啊!密码学计算更容易了~
[解决办法]
接分
[解决办法]
恭喜恭喜!-_-,接分
[解决办法]
恭喜,接分!
[解决办法]
恭喜恭喜!
[解决办法]
接分
[解决办法]
up
[解决办法]
up
[解决办法]
热烈祝贺!!
[解决办法]
恭喜楼主
[解决办法]
太牛了 !!
[解决办法]
ox
[解决办法]
向楼主学习:)
顺便支持一下
[解决办法]
恭喜
[解决办法]
KO!
[解决办法]
楼主强!
[解决办法]
恭喜 恭喜
[解决办法]
恭喜
[解决办法]
接分
[解决办法]
接分
[解决办法]
恭喜
[解决办法]
恭喜,接分,呵呵
------解决方案--------------------
恭喜
[解决办法]
jf
[解决办法]
支持
楼主如果有精力的话,移植到其他平台,比如龙芯,影响力会更大。
当然开源更好。:)
[解决办法]
恭喜!
[解决办法]
恭喜!!!
[解决办法]
学习学习~
[解决办法]
没有库的源码?
[解决办法]
学习~
[解决办法]
哈哈哈。
恭喜楼主。
顺便恭喜新年。
[解决办法]
我测试了下 我写的大数运算,与你的相比
ms 512位二进制的乘法 你的时间比我的代码花得要长呢???
[解决办法]
来接分,嘿嘿
[解决办法]
学习,jf
[解决办法]
MARK
[解决办法]
恭喜,接分!!
[解决办法]
俺还是要泼你的冷水
GMP和你算法的比较不应该这么做
建议参考密码编码学-加密方法的C于C++实现的比较方法
单纯比较
若干次加 减 乘 除 的时间
而不是比较阶乘和斐波那契数的生成
因为你也许内部针对这个阶乘和斐波那契数进行了优化
建议生成若干随机数字进行四则运算比较
[解决办法]
你不这么做
你说比GMP好
总会有人提出疑问的
[解决办法]
好吧
你就做个普通的测试如何
另外, 你该思考HugeCalc的定位了
GMP的目标是通用的高精度计算
MIRACL是加密解密
Maple是数学
Matlab是工程
那HugaCalc呢?
如果你用来加密解密
那不应该继续改进了,而是增加功能和稳定性
如果是用来通用数学计算
那你自己独立开发的格局应该终止了
作为数学软件包,你提供的功能太单一
用来做数论研究功能足够了
但提供的函数太少了太少了
[解决办法]
下面几点问题请考虑
1、GMP是通用跨平台库,你只是X86/win库
2、GMP已停止更新超过1年了,在准备推出版本5
3、你的代码严重依赖于MS编译器
4、你如果过度考虑优化,肯定带来代码的复杂度提升,在纠正Bug上很不好处理, 你应该稳定一个版本再迭代,你考虑过随机计算后的结果都是正确的么?
如果你想继续发展HugeCalc
请考虑这几个问题吧
祝你新年快乐
我还会继续和你讨论的!
[解决办法]
老大啊
不要过度敏感好不好啊
我哪里说你的算法速度不如GMP了啊
我就是说你能不能用普通方法比较下你的算法和GMP算法的时间差异
你做通用高精度运算库,可不是仅做阶乘和斐波那契数列的啊
如果你承认这点,你可以不做比较
我说下比较方法,比较乘法和加法,以二进制位数为比较依据,二进制数字均随机生成,可以32位为单位随机生成
比较的具体位数是
256 512 1024 1536 2048 3072 4096 8192 10240 16384 64000 65536 1048576 33554432
[解决办法]
加时间应该是线性增长的
乘应该涵盖了几种不同算法的位数范围
如果有遗漏,自己补充齐
另,你解决了超大数字的算法了么?
超大,超过2G二进制位的算法
非64位寻址
[解决办法]
有用处
有大用处
比如算圆周率
就用到了超大数字
另外
你实现了几种乘法?都是什么?
我觉得你应该公开代码
GMP代码都是公开的,也没见谁拿来赚钱
因为这个都是小应用范围的东西
没点技术准备不可能拿来直接充自己的
公开代码也能帮你自己找问题和Bug
况且,这个东西很难用来赚钱
之前的经历你自己也应该清楚这个了
[解决办法]
不是诘难
而是建议
什么叫时机成熟??
再说公开了,代码还是你的!