LSR 007 - Lamina的有理数标准

基本信息

  • LSR 编号 007
  • 标题 LSR 007 - Lamina的有理数模块
  • 作者 mcplayeraz
  • 状态 草案
  • 类型 标准规范类
  • 创建日期 08-21-2025
  • Lamina 版本 不适用

摘要

本LSR描述了Lamina中有理数(整数,分数,小数)的标准,包含了有理数的实现。

技术规范

整数

舍弃原来的int部分,将BigInt改为Lamina标准整数Int。 即默认使用大整数来操计算。

Int类基本操作: | 操作 | 功能 | | :----------- | :---------------------- | | 初始化(str) | 从string初始化Int | | 比较 | 比较两个Int | | 加法 | 将两个Int相加 | | 减法 | 将两个Int相减 | | 乘法 | 将两个Int相乘 | | 除法 | 将两个Int相除 | | 取负 | 得到Int的相反数 | | 取余 | 将一个Int对另一个取余 | | 求幂 | 求一个Int的实数幂次 | | 最小公倍数 | 计算两个Int的最小公倍数 | | 最大公约数 | 计算两个Int的最大公约数 | | 转化为字符串 | 将一个Int转化为string |

储存方式

使用uint32_t或者uint64_t储存绝对值,提高效率。 使用bool储存符号位。

求幂方式

若幂次为Int,则使用Int储存计算结果。用快速幂处理小指数,用Montgomery处理大指数。 若幂次为Fraction,则用Irrational储存,先计算Int的分子次幂,再开分母次方根。

分数

使用Fraction类,分子和分母使用Int类储存。 创建小数时,自动转化为分数

Fraction类基本操作: | 操作 | 功能 | | :----------------- | :----------------------------- | | 初始化(分子分母) | 由分子分母初始化分数(自动化简) | | 初始化(小数字符串) | 由小数初始化分数 | | 比较 | 比较两个Int | | 加法 | 将两个Fraction相加 | | 减法 | 将两个Fraction相减 | | 乘法 | 将两个Fraction相乘 | | 除法 | 将两个Fraction相除 | | 取负 | 得到Fraction的相反数 | | 求幂 | 求一个Fraction的实数幂次 | | 转化为字符串 | 将一个Fraction转化为string | | 转化为double | 将一个Fraction近似为double |

小数

使用float储存小数。 小数用于对一个变量近似。 由于默认不使用,因此不考虑精度和上限问题。