0


C++独立开发开源大数计算库 CBigNum

项目简介&项目地址

CBigNum

是本人独立开发开源的一款大数计算库,支持任意位数整数带任意位数小数的浮点运算。您可以通过本库执行非常大的数据运算或非常高精度的除法运算(您可以随意指定除法的小数保留到第几位)以及各种科学计算(详见1.3)。

项目地址:https://github.com/ChrisChen0904CY/CBigNum

目录

本开源库支持通过

CMake

进行本地部署安装,具体操作如下:

Linux 部署说明

  1. 首先,您需要克隆或下载本项目到本地。

  2. 在本项目地址打开终端,执行以下命令:

mkdir build
cd build
cmake ..
cmake --build .
  1. 如果您希望将本大数库安装到您的系统环境中,请接着执行如下命令:
cmake --install . 

Windows 部署说明(有VS)

  1. 首先,您需要克隆或下载本项目到本地。

  2. 在本项目地址打开命令提示符 cd,执行以下操作:

mkdir build
cd build
cmake .. -G "Visual Studio 16 2019" -A x64
  1. 接着请以VS打开构建出的 .sln 文件进行编译输出。

  2. 如果您希望将本大数库安装到您的系统环境中,请接着执行如下命令:

cmake --install . 

Windows 部署说明(MinGW)

  1. 首先,您需要克隆或下载本项目到本地。

  2. 在本项目地址打开命令提示符 cmd,执行以下操作:

mkdir build
cd build
cmake .. -G "MinGW Makefiles"
  1. 接着执行如下命令编译库
mingw32-make
  1. 如果您希望将本大数库安装到您的系统环境中,请接着执行如下命令:
cmake --install . 

如果您只是希望短暂地使用本库,你可以直接将

cbignum.h

cbignum.cpp

两个文件复制到您的项目工程中,并直接调用即可:

#include"cbignum.h"

1.1 实例化

本大数库支持多种类型的数据实例化方法,实例化的方法如下:

CBigNum num(xxx);

此处

xxx

可以是以下类型的任意常量或变量:
数据类型备注short; unsigned short无int; unsigned int无long int; unsigned long int无long long int; unsigned long long int无float无double无long double无string需要是严格的浮点数或整数字符串,无法解析的字符串会按照默认构造实现。另外从字符串构造大数时会自动去除前缀和后缀零。vector<char>, vector<char>前者代表整数部分数据,后者代表小数点部分数据,详见第三章解释

1.2 运算支持

本开源库目前支持四则运算以及四则运算的混合运算,同时实现了十进制上的左右移运算以及整除取余。同时支持各种比较符负号的使用。

下表是关于各运算或操作的具体说明:
运算类型运算符号或函数备注加法+, +=无减法-, -=无乘法*, *=无除法/, /=不可以用零做分母,并且可以调用函数

void setResFracBits(long long bits);

来控制结果保留的小数位数左移<<, <<=左移符号后只能跟随整数,负数的时候会视作右移右移>>, >>=右移符号后只能跟随整数,负数的时候会视作左移整除

pair<CBigNum, CBigNum> intDivision(const CBigNum& other) const;

返回一个pair,前者是整除的商,后者是余数且为浮点余数取余%, %=返回浮点余数负号-无大小比较符>, >=, <, <=, ==, !=无绝对值

CBigNum abs(const CBigNum& num) const

无四舍五入

round(long long bits)

将大数四舍五入到指定位数,并将精度位数同步修改到指定位数

1.3 科学计算(cbigmath.h)

本项目参考《实用数值计算方法》(甄西丰 著) 一书完成了

cbigmath.h

cbigmath.cpp

实现了对如下一些函数的计算功能。您同样可以通过设置大数的

resFracBits

值来控制这些函数的计算精度。
科学运算具体函数备注多项式计算

poly_value(const T& value, T* A, long long n)
T

是所有支持构造成

CBigNum

的类,数组

A

是多项式的每一项系数

         e 
        
       
         x 
        
       
      
     
       e^x 
      
     
   ex
exp(const T& value)

无幂运算

pow(const CBigNum& num, const T& value)

可以计算

        n 
       
      
        u 
       
       
       
         m 
        
        
        
          v 
         
        
          a 
         
        
          l 
         
        
          u 
         
        
          e 
         
        
       
      
     
       num^{value} 
      
     
   numvalue开n次方根
nrt(const T& value, long long n)

可以开正整数n次根开平方

sqrt(const T& value)

无开立方

cbrt(const T& value)

无自然对数

ln(const T& value)

给定的数必须是正数普通对数

log(const CBigNum& base, const T& value)

底数为不是1的正数,真数为正数正弦函数

sin(const T& value)

无余弦函数

cos(const T& value)

无正切函数

tan(const T& value)

无余切函数

cot(const T& value)

无反正弦函数

asin(const T& value)

给定的值必须在[-1, 1]之间反余弦函数

acos(const T& value)

给定的值必须在[-1, 1]之间反正切函数

atan(const T& value)

无反余切函数

acot(const T& value)

1.4 输出支持

本大数类型实例化的对象可以直接通过

cout

输出,并且大数指针也可以直接输出。

  • 实例化和输出
CBigNum num1; // 0
CBigNum num2(123); // 123
CBigNum num3(-556); // -556
CBigNum num4(0); // 0
CBigNum num5("0001.2345678900"); // 1.23456789
CBigNum num6("-123465789.987654321"); // -123456789.987654321
CBigNum num7("1..02"); // 0
CBigNum num8(1.23456); // 1.23456
CBigNum num9(-23456.123); // -23456.123
CBigNum num10(0.1); // 0.1
  • 各种运算和比较符的使用
num1 + num2; // 123
num1 - num2; // -123
num1 * num2; // 0
num1 / num2; // 0
num1.intDivision(num2); // 0 123
num1 % num2; // 0
abs(num2); // 123
-num2; // 123
num2 << 1; // -1230
num2 << -1; // -12.3
num2 >> 1; // -12.3
num2 >> -1; // -1230
  • 除法保留位数的控制
/* 123 / 1.23456 */
num2.setResFracBits(16);
num2 / num8; // 99.6306376360808709
num2.setResFracBits(32);
num2 / num8; // 99.63063763608087091757387247278383

本项目用两个

vector<char>

数组来分别存储大数的整数部分和小数部分。以一个

bool

类型变量

positive

来标记大数的正负情况。另外每个大数还有一个

long long

类型的成员变量

resFracBits

用来控制该数做除数时商的小数点后保留位数。

如果您对本项目有任何建议、想法或疑惑请联系我的邮箱:

📫chrischanyedu@gmail.com

标签: c++ 数据结构

本文转载自: https://blog.csdn.net/m0_51510934/article/details/142325957
版权归原作者 代码小狗Codog 所有, 如有侵权,请联系我们删除。

“C++独立开发开源大数计算库 CBigNum”的评论:

还没有评论