当前位置: 首页 > article >正文

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

项目简介&项目地址

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

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

目录

  • 0. 如何部署
  • 1. 如何使用
  • 2. 使用示范
  • 3. 数据结构说明
  • 4. 联系邮箱

0. 如何部署⬆️

本开源库支持通过CMake进行本地部署安装,具体操作如下:

Linux 部署说明

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

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

mkdir build
cd build
cmake ..
cmake --build .

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

cmake --install . 

Windows 部署说明(有VS)

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

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

mkdir build
cd build
cmake .. -G "Visual Studio 16 2019" -A x64

3. 接着请以VS打开构建出的 .sln 文件进行编译输出。

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

cmake --install . 

Windows 部署说明(MinGW)

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

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

mkdir build
cd build
cmake .. -G "MinGW Makefiles"

3. 接着执行如下命令编译库

mingw32-make

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

cmake --install . 

如果您只是希望短暂地使用本库,你可以直接将 cbignum.hcbignum.cpp 两个文件复制到您的项目工程中,并直接调用即可:

#include "cbignum.h"

1. 如何使用⬆️

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

1.3 输出支持

本大数类型实例化的对象可以直接通过 cout 输出,并且大数指针也可以直接输出。

2. 使用示范⬆️

  • 实例化和输出
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

3. 数据结构说明⬆️

本项目用两个vector<char>数组来分别存储大数的整数部分和小数部分。以一个bool类型变量positive来标记大数的正负情况。另外每个大数还有一个long long类型的成员变量resFracBits用来控制该数做除数时商的小数点后保留位数。

4. 联系邮箱⬆️

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

📫chrischanyedu@gmail.com


http://www.kler.cn/news/315476.html

相关文章:

  • MySQL之内置函数
  • 【笔记】第三节 组织与性能
  • 搜维尔科技:Unity中的A.R.T.测量工具
  • 金仓数据库 KingbaseES参考手册 (8. 函数(九))
  • C++标准库容器类——string类
  • KTH5762系列 低功耗、高精度 3D 霍尔角度传感器 电子手表旋钮应用
  • 机器翻译之Bahdanau注意力机制在Seq2Seq中的应用
  • 【计网】从零开始掌握序列化 --- JSON实现协议 + 设计 传输\会话\应用 三层结构
  • 对时间序列SOTA模型Patch TST核心代码逻辑的解读
  • 基于区块链的相亲交易系统源码解析
  • vue3 本地windows下的字体的引用
  • 分布式锁优化之 使用lua脚本改造分布式锁保证判断和删除的原子性(优化之LUA脚本保证删除的原子性)
  • FFmpeg开发笔记(五十六)使用Media3的Exoplayer播放网络视频
  • Java 入门指南:JVM(Java虚拟机)——类的生命周期与加载过程
  • web基础—dvwa靶场(八)SQL Injection(Blind)
  • 众数信科AI智能体政务服务解决方案——寻知智能笔录系统
  • ‌内网穿透技术‌总结
  • SpringCloud config native 配置
  • mysql性能优化- 数据库配置优化
  • java面试题第一弹
  • Mybatis Plus分页查询返回total为0问题
  • PostgreSQL技术内幕10:PostgreSQL事务原理解析-日志模块介绍
  • 若依框架多次list查询时,分页失效
  • 使用Apache SeaTunnel高效集成和管理SftpFile数据源
  • 伊犁云计算22-1 apache 安装rhel8
  • C++:tinyxml2用于解析、操作和生成XML文件
  • Git基本用法总结
  • ZYNQ学习--AXI总线协议
  • 001.docker30分钟速通版
  • 深入 mysql,掌握一对一、一对多、多对多表设计、查询及级联操作