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储存小数。
小数用于对一个变量近似。
由于默认不使用,因此不考虑精度和上限问题。