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.xdnf.cn/news/1537962.html

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

相关文章

MATLAB路径规划如何采用矢量法让他们尽量在一个方向??

&#x1f3c6;本文收录于《CSDN问答解惑-专业版》专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收…

HTML | 外部引入 CSS 的2种方式:link和@import有什么区别?

外部引入 CSS 有2种方式&#xff0c;link 和 import。就结论而言&#xff0c;强烈建议使用 link &#xff0c;慎用 import 方式。 两者都是外部引用 CSS 的方式&#xff0c;但是存在一定的区别&#xff1a; &#xff08;1&#xff09;从属关系区别 link是HTML / XHTML标签&a…

误删分区后的数据救赎恢复实战解析

在数字化时代&#xff0c;数据不仅是信息的载体&#xff0c;更是个人记忆与企业资产的宝贵财富。然而&#xff0c;误删分区这一操作失误&#xff0c;却如同暗流涌动&#xff0c;悄无声息地吞噬着用户的重要数据。本文将深入探讨误删分区的现象、影响&#xff0c;并详细介绍一种…

Linux运维培训班靠谱吗?如何判断一个培训班的教学质量?

当我们下定决心打算系统培训Linux运维时&#xff0c;哪家机构比较好成为了我们面临的最大难题。之前分享过很多培训机构的个人感受&#xff0c;但授人以鱼不如授人以渔&#xff0c;说到底那些都是我个人的看法&#xff0c;因此今天打算帮助大家学会如何判断一个培训班的好坏。 …

C# 修改项目类型 应用程序程序改类库

初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github&#xff1a;codetoys&#xff0c;所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的&#xff0c;可以在任何平台上使用。 源码指引&#xff1a;github源…

72、Python之函数式编程:纯函数与lambda表达式

引言 今天聊点简单的&#xff0c;也就是“纯函数”。任何一个函数只要满足纯函数的两个特性&#xff0c;就是纯函数。纯函数与lambda表达式&#xff0c;其实没有必然的联系。只是由于lmbada表达式比较简洁&#xff0c;很多时候可以作为纯函数的一种实现方式。 本文的主要内容…

PointNet++改进策略目录

后续我将如何使用文章中创新点加入的PointNet中代码实现部分进行更新 题目原理解析代码改进PointNet改进策略 &#xff1a;模块改进 | LFA | RandLA-Net&#xff0c;通过随机采样与局部特征聚合提升大规模3D点云处理效率✔️❌PointNet改进策略 &#xff1a;模块改进 | Residua…

【网络】详解HTTP协议的CGI机制和CGI进程

目录 引言 CGI机制模型 伪代码示例 个人主页&#xff1a;东洛的克莱斯韦克-CSDN博客 引言 CGI机制是HTTP协议提供的偏底层的一套机制&#xff0c;也是非常重要的机制——它让大量的业务进程和HTPP协议解耦。而CGI进程是业务层的&#xff0c;用来处理各种数据&#xff0c;比…

1分钟解锁AI绘本财富密码:从0到10万粉,她只用了三步!

在这个信息爆炸的时代&#xff0c;我们每天都在为生活奔波&#xff0c;赚钱似乎变得越来越难。记得小时候&#xff0c;我们总是梦想着能有一种魔法&#xff0c;让书本里的金币自动飞入脑中&#xff0c;但现实却是残酷的我们只能眼睁睁地看着那些遥不可及的梦想。然而&#xff0…

Selenium with Python学习笔记整理(网课+网站)

本篇是根据学习网站和网课结合自己做的学习笔记&#xff0c;后续会一边学习一边补齐和整理笔记 官方学习网站在这获取&#xff1a; https://selenium-python.readthedocs.io/getting-started.html#simple-usage WEB UI自动化环境配置 (推荐靠谱的博客文章来进行环境配置,具…

再次被对地观测拒稿

又拒稿了&#xff0c;这次应该不是没法修改了&#xff0c;范围不一样&#xff0c;准备改投其他期刊了。 创新性不够说明还难以达到1区的要求&#xff0c;继续先投着一区试试吧&#xff0c;不行再降了 所以说还需要一开始就对照期刊范围来写&#xff0c;比较有针对性。

apk反编译修改教程系列-----修改apk 去除软件加固状态 应用加固的一些常识与检测【二十六】

目前很多apk应用有加固。其中包括如360加固、腾讯乐固等,厂商无非是把一系列的混淆、加密、隐藏、检测等技术组合起来,封装好给你使用。真实的目的就是防止APK被调试 。呗任意修改。此博文普及一些加固的基本常识。后续实例演示一些apk去加固的步骤。 通过博文了解 1-----a…

OpenAI的o1模型与Transformer的无限潜力:数学证明推理算力无上限

近期&#xff0c;斯隆奖得主马腾宇和Google Brain推理团队创始人Denny Zhou合作&#xff0c;提出了一项引人注目的数学证明&#xff1a;只要思维链&#xff08;CoT&#xff09;足够长&#xff0c;Transformer就有能力解决各种复杂问题。这一发现引发了广泛关注&#xff0c;因为…

智能BI项目第三期

AIGC AI 提问技巧 为了让 Al 更好地理解我们的输入&#xff0c;并给出预期精确的输出&#xff0c;需要严格控制我们的提问词。 1.使用系统预设 控制输入格式(便于Al精确地理解我们的需求) 你是一个数据分析师和前端开发专家&#xff0c;接下来我会按照以下固定格式给你提供…

【开源免费】基于SpringBoot+Vue.JS在线文档管理系统(JAVA毕业设计)

本文项目编号 T 038 &#xff0c;文末自助获取源码 \color{red}{T038&#xff0c;文末自助获取源码} T038&#xff0c;文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 查…

<<编码>> 第 14 章 反馈与触发器(1)--振荡器 示例电路

继电器振荡器 info::操作说明 无需操作, 保持控制开关常闭以形成振荡 如需停止振荡, 则断开控制开关 注: 要看到灯闪烁的效果, 右上角 “仿真速度” 控制杆应设置为一个较低的位置(靠左侧) 另: 因继电器内部开关跳动动画效果耗时太长, 即便设置为较低的仿真速度也无法观察到开关…

不要沉迷大模型的技术与理论,学习大模型的方法——从做一个小应用开始

“ 在应用中学习技术&#xff0c;而不是沉迷于技术本身 ” 不知道大家都是怎么学习大模型技术的&#xff0c;但从个人的经验和公众号的反馈来看&#xff0c;有些人在学习大模型技术时转进了牛角尖&#xff0c;导致很多东西学不明白&#xff0c;事倍功半。 今天就从个人的学习…

PDF标准详解(五)——图形状态

在第三节中&#xff0c;我们说到Q/q 这一对操作符是用来保存和还原图形状态的&#xff0c;那个时候只有一个简单的概念&#xff0c;变换矩阵是图形状态的一员&#xff0c;那么什么是图形状态&#xff0c;以及有哪些图形状态呢&#xff1f;本节将要描述这部分的内容 图形状态 …

PHP邮箱系统:从入门到实战搭建教程指南!

PHP邮箱系统配置教程&#xff1f;如何选用合适的PHP邮箱系统库&#xff1f; 为了满足个性化和定制化的需求&#xff0c;许多开发者选择使用PHP来搭建自己的邮箱系统。AokSend将带你从入门到实战&#xff0c;详细介绍如何搭建一个功能完善的PHP邮箱系统。 PHP邮箱系统&#xf…

dcmtk在MWLSCP会忽略对于字符集的匹配

版本信息 dcmtk v3.6.4 2018-11-29 发现的原因 在我将dcmtk的wlmscpfs当作MWLSCP使用的时候&#xff0c;我在SCU端为了防止过来的数据中存在不识别的字符集&#xff0c;对于收到的数据数据进行了字符集的过滤&#xff0c;但是发现过滤没有生效。 确保数据源 首先需要确认数…