Skip to content

hdzz/BigNumber

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

82 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

###大数类

####版本 4.0 功能: 支持任意数位的加减乘除运算,阶乘运算。 数据结构: string,保存数字中所有信息(包括长度、正负、小数点)。 进制: 10 运算符重载: + - * / += -= *= /= ++(前后缀) --(前后缀) > < == != 使用: BigNumber a("123456.789"), b("-987654.321"); a = a + b; a *= b; 性能信息(Windows 7, Intel i3 CPU 2.1 GHz): 10000 的阶乘用时 65 分钟

####版本 5.2.1 功能: 支持任意数位的加减乘除运算,阶乘运算,幂数运算,圆周率运算,取模运算

数据结构:
    unsigned char *val;         存放数字
    unsigned char *first_free;  数字结尾
    int cap;                    分配的内存大小
    int len;                    实际长度
    int dot;                    小数点所在位置
进制:
    10
运算符重载:
    +  -  *  /  +=  -=  *=  /=  ++(前后缀)  --(前后缀)
    >  <  <= >=  ==  !=
    <<
使用:
    BigNumber a("123456.789"), b("-987654.321");
    a = a + b;
    a *= b;
性能信息:
    10000 的阶乘用时 25 秒钟,比版本4.0性能提升 156 倍

####版本 6.4.3 这个版本主要是为了在阶乘运算上尽可能地提升性能,所以没有完成版本5.2.1的所有功能。 数据结构(部分): int cap_i_; 分配的内存大小 int *intg_; 整数部分数字 int *free_i_; 整数部分数字末尾 int len_i_; 整数部分长度 进制: 1000000000(十亿) 性能信息: 最差性能:10000 的阶乘用时 1.9 秒 一次优化后的性能:10000 的阶乘 0.4 秒(将阶乘数划分区间后运算) 二次优化后的性能:10000 的阶乘 0.4 秒(将阶乘数划分区间后合并运算) 三次优化后的性能: (Ubuntu 14.04 LTS) 10000 的阶乘 0.15秒 (将阶乘数划分区间后运算并减少赋值) 100000 的阶乘 39 秒 三次优化后比版本4.0性能提升 26000 倍,比版本5.2.1性能提升 166 倍。 其他性能: 100000 的阶乘用时 65 秒钟 1000000 的阶乘用时 2.7 小时

####版本 6.6.3 多线程并行来进一步做出优化

性能信息:
操作系统  Ubuntu 14.04 LTS
内核      Linux 3.x
CPU       Intel i3  2.1 GHz

10000   的阶乘  0.090 秒
100000  的阶乘  13.3  秒
1000000 的阶乘  2000  秒 (33.3分钟)

####版本 6.7.0 使用智能指针减少拷贝

性能信息:
操作系统  Ubuntu 14.04 LTS
内核      Linux 3.x
CPU       Intel i3  2.1 GHz

10000   的阶乘  0.087 秒
100000  的阶乘  12.8  秒
1000000 的阶乘        秒

10000 的阶乘比版本4.0性能提升 44827 倍,比版本5.2.1性能提升 287 倍,
比版本6.4.3性能提升 1.7 倍

About

高精度计算

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published