# Mo_hdu_C语言高精度实数运算库 **Repository Path**: tqw4321/c_bigDecimal ## Basic Information - **Project Name**: Mo_hdu_C语言高精度实数运算库 - **Description**: 借着程序设计课程实践大作业的机会,设计了C语言的高精度大实数运算库。 - **Primary Language**: C - **License**: LGPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2023-08-10 - **Last Updated**: 2023-08-10 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Mo_hdu_C语言高精度实数运算库 #### 介绍 随着数据的增加和多样化,基本数据类型的长度与精度往往难以满足人们的需求。Java语言凭借其面向对象的特性和众多青睐其的开发者而拥有了 BigDecimal 类库,负责处理大数和对精度要求极高的实数。而对于C语言迟迟没有功能相似的类库出现,难以满足部分开发需求。借着2020-2021-2学期程序设计课程实践期末大作业的机会,设计了C语言高精度实数库。 #### 类库架构 ![C语言高精度实数类库架构图](https://static01.imgkr.com/temp/632ca19abe624eb6942c1237d0a647fa.png) #### 使用说明 1. 将 “UBigNumber.h” "UBigNumber.c" "BigDecimal.h" "BigDecimal.c" 复制到目标文件的目录下。 2. 在目标文件的第一行输入 ```c #include "BigDecimal.h" ``` (注: 因使用了自定义的头文件, 推荐使用 **Clion** 等 IDE 进行编译。使用 Visual Studio Code 等编辑器仅对目标文件进行编译将无法得到正确结果。) 3. 声明一个高精度实数结构体, 并使用输入函数对其赋值。 ```c struct BigDecimal number = InputBD("real"); ``` 4. 可供使用的函数如下: ```c struct BigDecimal InputBD(char * s); // 输入函数 struct BigDecimal AddBD(struct BigDecimal * pA, struct BigDecimal * pB); struct BigDecimal SubBD(struct BigDecimal * pA, struct BigDecimal * pB); struct BigDecimal MultiplyBD(struct BigDecimal * pA, struct BigDecimal * pB); struct BigDecimal DivBD(struct BigDecimal * pA, struct BigDecimal * pB,int R); // R 表示精度, 精确到小数点后第几位 void DestroyBD(struct BigDecimal * pBD); // 高精度实数使用完成后需要销毁, 防止内存泄漏 void PrintBD(struct BigDecimal bd); // 将高精度实数输出到屏幕上 ``` (注: 以下划线开头的为内部处理辅助函数, 不推荐使用。) 5. 高精度实数使用完毕后, 需要使用函数对其进行回收, 防止内存泄漏。 ```c DestroyBD(&number); // 回收分配给结点的内存, 防止内存泄漏 ``` #### 样例代码 ```c #include "BigDecimal.h" int main() { struct BigDecimal A, B, C, D, E, F; A = InputBD("12345.6"); B = InputBD("1234.5"); PrintBD(A); C = AddBD(&A, &B); // 13580.1 D = SubBD(&A, &B); // 11111.1 E = MultiplyBD(&A, &B); // 15240643.2 F = DivBD(&A, &B, 2); // 10.00 保留 2 位小数 DestroyBD(&A); DestroyBD(&B); DestroyBD(&C); DestroyBD(&D); DestroyBD(&E); DestroyBD(&F); return 0; } ```