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

news2024/9/27 17:27:29

项目简介&项目地址

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

项目地址: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
四舍五入round(long long bits)将大数四舍五入到指定位数,并将精度位数同步修改到指定位数

1.3 科学计算(cbigmath.h)

本项目参考《实用数值计算方法》(甄西丰 著) 一书完成了 cbigmath.hcbigmath.cpp 实现了对如下一些函数的计算功能。您同样可以通过设置大数的resFracBits值来控制这些函数的计算精度。

科学运算具体函数备注
多项式计算poly_value(const T& value, T* A, long long n)T是所有支持构造成CBigNum的类,数组A是多项式的每一项系数
e x e^x exexp(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 输出,并且大数指针也可以直接输出。

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.coloradmin.cn/o/2165683.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数字电路基础(锁存器+触发器)+Proteus仿真

1.锁存器 1.1.基本概念 1.1.1基本双稳态电路 下面电路中&#xff0c;具有0、1两种逻辑状态&#xff0c;一旦进入其中一种状态&#xff0c;就能长期保持不变的单元电路称为双稳态存储电路&#xff0c;简称双稳态电路。 锁存器和触发器都属于双稳态电路 该双稳态电路没有输入…

【Godot4自学手册】第四十八节创建雨粒子效果

今天我们要利用GPU粒子节点玩雨粒子效果&#xff0c;下雨天。 一、添加GPU粒子系统 添加GPUParticles2D节点。选择根节点&#xff0c;单击添加按钮&#xff0c;选择GPUParticles2D&#xff0c;完成添加。 二、修改属性 1.设置粒子数量。 在GPUParticles2D检查器中将Amount设…

智慧城市主要运营模式分析

(一)运营模式演变 作为新一代信息化技术落地应用的新事物,智慧城市在建设模式方面借鉴了大量工程建设的经验,如平行发包(DBB,Design-Bid-Build)、EPC工程总承包、PPP等模式等,这些模式在不同的发展阶段和条件下发挥了重要作用。 在智慧城市发展模式从政府主导、以建为主、…

求一个数的因子数(c语言)

1.计算并输出给定整数n的所有因子&#xff08;不包括1与n自身&#xff09;之和。规定n的值不大于1000。&#xff08;因子是能整除n的数 即n%i0&#xff09; // 例如&#xff0c;在主函数中从键盘给n输入的值为856&#xff0c;则输出为: sum763。 2.第一步我们先输入n的数&…

C++深入学习string类成员函数(1):默认与迭代

引言 在 C 编程中&#xff0c;std::string 类是处理字符串的核心工具之一。作为一个动态管理字符数组的类&#xff0c;它不仅提供了丰富的功能&#xff0c;还通过高效的内存管理和操作接口&#xff0c;极大地方便了字符串操作。通过深入探讨 std::string 的各类成员函数&#…

【java21】java21新特性之简单的Web服务器jwebserver

jwebserver是Java 18中引入的一个全新功能点&#xff0c;它允许用户通过命令行工具快速启动一个提供静态资源访问的迷你Web服务器。这个服务器不支持CGI和Servlet&#xff0c;因此其主要用途是轻量级的静态文件服务&#xff0c;如HTML、CSS、JavaScript和图片等。 其实在如Pyt…

热源检测系统源码分享

热源检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vision …

大语言模型之LlaMA系列- LlaMA 2及LLaMA2_chat(上)

LlaMA 2是一个经过预训练与微调的基于自回归的transformer的LLMs&#xff0c;参数从7B至70B。同期推出的Llama 2-Chat是Llama 2专门为对话领域微调的模型。 在许多开放的基准测试中Llama 2-Chat优于其他开源的聊天模型&#xff0c;此外Llama 2-Chat还做了可用性与安全性评估。 …

大数据 flink 01 | 从零环境搭建 简单Demo 运行

什么是Flink Flink是一个开源的流处理和批处理框架,它能够处理无界和有界的数据流&#xff0c;具有高吞吐量、低延迟和容错性等特点 Flink 可以应用于多个领域如&#xff1a;实时数据处理、数据分析、机器学习、事件驱动等。 什么是流式处理&#xff1f;什么是批处理 流处理…

Python 如何使用 unittest 模块编写单元测试

Python 如何使用 unittest 模块编写单元测试 单元测试是软件开发过程中的重要环节&#xff0c;它帮助开发者验证代码的正确性&#xff0c;确保功能按预期工作。Python 提供了一个强大的内置模块 unittest&#xff0c;使得编写和执行单元测试变得非常方便。本文将深入探讨如何使…

计算机组成原理(笔记5原码和补码的乘法以及直接补码阵列乘法器 )

原码一位乘法 手算&#xff1a;过程 令x′|x|0.x1x2…xn-1xn&#xff0c;y′|y|0.y1y2…yn-1yn 同时令乘积P′ |P| x′ y′&#xff0c;有&#xff1a; x′ y′ x′(0.y1y2…yn-1yn) x′ (y12-1y22-2…yn-12-(n-1)yn2-n) 2-1(y1x′2-1(y2x′…2-1(yn-1x′2-1(ynx′0))…))…

使用awvs测试站点并输出漏洞报告教程

环境配置 pikachu靶场 awvs 使用步骤 1.访问本机3443端口&#xff08;安装时自己设定的端口&#xff09; 2.点击【Targets】--》【Add Targets】新建扫描目标&#xff0c;输入目标网址&#xff08;以pikachu靶场为例&#xff09;&#xff0c;点击【Save】开始扫描 2.点击【…

【AI大模型】股票价格预测精度增强,基于变分模态分解、PatchTST和自适应尺度加权层

简介 股票价格指数是金融市场和经济健康的晴雨表&#xff0c;准确预测对投资决策至关重要。股票市场的高频交易和复杂行为使得预测具有挑战性&#xff0c;需开发稳定、准确的预测模型。研究表明&#xff0c;估值比率、数据驱动模型&#xff08;如支持向量机&#xff09;、股票…

机器学习 | 使用scikit-learn学习Python中的PCA(主成分分析)

为什么选择PCA&#xff1f; 当有许多输入属性时&#xff0c;很难将数据可视化。在机器学习领域有一个非常著名的术语“维度诅咒”。基本上&#xff0c;它指的是数据集中的属性数量越多&#xff0c;对机器学习模型的准确性和训练时间产生不利影响。主成分分析&#xff08;PCA&a…

使用Postman工具接口测试

文章目录 一、接口1.1 接口的概念1.2 接口的类型 二、接口测试2.1 概念2.2 原理2.3 特点 三、HTTP协议3.1 http协议简介3.2 URL格式3.3 HTTP请求3.3.1 请求行3.3.2 请求头3.3.3 请求体 3.4 HTTP响应3.4.1 状态行3.4.2 响应头3.4.3 响应体 3.4 传统风格接口3.5 RESTful风格接口 …

二网络复习

软路由&#xff1a; 1. ikuai 实现了一个多宽带线路的一个聚合可用家庭环境 2. Linux通过开启路由转发模拟路由器 &#xff08;仅学习使用&#xff09; #开启路由转发命令 vim /etc/sysctl.conf net.ipv4.ip_forward 1 sys…

C++学习笔记----8、掌握类与对象(一)---- 对象中的动态内存分配(1)

1、FRIENDS c允许类声明为其它类&#xff0c;其它类的成员函数&#xff0c;或者非成员函数为friend。可以访问protected与private数据成员与成员函数。例如&#xff0c;假设你有两个类Foo与Bar。你可以指定Bar类是Foo类的一个friend&#xff1a; class Foo {friend class Bar;…

《声入人心》团综重启,芒果能否再造一个群像神话?

随着《声入人心》团综《吾湖音乐局》于9月20日宣布重启&#xff0c;芒果的又一群像综艺“杀”回了市场。 从2018年音综市场冲出的一匹黑马&#xff0c;到2024年“声人”分散在影视综各个领域&#xff0c;这六年间芒果上演了无数次“狼来了”&#xff0c;但这一次团综是真的来了…

实现一个超轻量级实例分割网络的思路

文章目录 前言一、基本思路二、picodet三、yolact三、picodetyolact总结 前言 在某些工业领域&#xff0c;由于成本问题算力有限&#xff0c;只能实时跑一些超轻量级网络&#xff0c;拿目标检测来说&#xff0c;例如yolo-fast&#xff0c;pp-picodet这些。如果要跑实例分割&am…

魅思-视频管理系统 getOrderStatus SQL注入漏洞复现

0x01 产品简介 魅思-视频管理系统是一款集成了视频管理、用户管理、手机端应用封装等功能的综合性视频管理系统。该系统不仅以其强大的视频管理功能、灵活的用户管理机制、便捷的手机端应用封装功能以及高安全性和现代化的界面设计,成为了市场上备受关注的视频管理系统之一。…