19 个版本 (8 个稳定版)
1.2.3 | 2024 年 7 月 24 日 |
---|---|
1.2.0 | 2024 年 6 月 19 日 |
0.10.0 | 2024 年 4 月 18 日 |
0.9.0 | 2024 年 3 月 27 日 |
0.2.0 | 2023 年 11 月 12 日 |
#116 in 数学
每月 407 次下载
用于 6 个 Crates (5 个直接使用)
41KB
1K SLoC
iFloat
这个定点浮点数学库提供了对算术和几何运算的高效且确定的解决方案。
功能
-
使用 FixNumber 进行确定计算时的定点算术
-
使用 FixVec 执行 2D 定点向量运算
-
使用定点角度的三角函数
-
FixAngle 中的角度转换和处理实用工具
安装
use i_float::fix_float::FixFloat;
use i_float::fix_vec::FixVec;
工作原理
FixFloat 结构体使用定点算术执行计算,具有高度的精度和确定性。它支持 2^21 - 1 到 -2^21 + 1 范围内的数字,精度为 1/1024,最适合 1,000,000 到 -1,000,000 范围,精度为 0.01。
定点数字使用固定数量的位表示小数部分。在此实现中,表示定点数字小数部分的位数是 10,这允许精度为 1/1024 或大约 0.001。
以下是一些定点数字表示的示例
- 1 / 1024 ≈ 0.001 (表示为 1)
- 256 / 1024 = 0.25 (表示为 256)
- 1024 / 1024 = 1 (表示为 1024)
- (1024 + 512) / 1024 = 1.5 (表示为 1536)
- (2048 + 256) / 1024 = 2.25 (表示为 2304)
通过使用 FixFloat 结构体,您可以使用 i64 值执行算术运算,同时保持浮点数的精度,确保在不同平台和设备上的确定性行为。
用法
FixFloat
FixFloat 结构体使用 i64 作为底层存储来表示定点数字,允许确定性算术运算。当需要确定性行为时,请使用 FixFloat 进行计算而不是 i32 或 i64。 FixFloat 提供了一种使用 i64 值执行算术运算的同时保持浮点数精度的方法。
let a = FixFloat::new_number(1);
let b = FixFloat::new_number(2);
let c = a + b;
FixVec
《FixVec》结构体表示一个二维定点向量,提供各种实用方法和运算符以进行向量操作。当需要确定性行为时,请使用《FixVec》进行二维几何计算。
let a = FixVec::new_number(1, 1);
let b = FixVec::new_number(1, -1);
let c = a + b;
FixAngle
《FixAngle》类提供处理定点角度的各种实用方法,包括三角函数和角度转换。
let fix_angle = FixAngle::new_from_radians_f64(angle);
let fix_sin = fix_angle.sin();
let i64_sin = fix_sin.double();
许可
依赖
~0.4–1MB
~22K SLoC