2 个不稳定版本
0.2.0 | 2023 年 10 月 5 日 |
---|---|
0.1.0 | 2023 年 2 月 26 日 |
#767 in 数学
17KB
407 行
UnsignedF64
一个库,通过创建一个不能为负的 UnsignedF64
来为浮点数添加无符号整数的等效功能。这个想法适用于模拟代码等场景,在这些场景中,错误难以调试,类型也没有增加很多安全性(因为一切都是 f64)。
注意
鉴于这个问题比我预期的要复杂得多(例如,-0.0
不是一个负数,但通过 -Inf
创建了一个通向负数的路径,请参阅 https://github.com/hydrogen602/unsigned-f64/issues/1),因此我建议使用 typed_floats 库,该库更全面地解决了这个问题。
为了解决上述问题,在调用 UnsignedF64::new
时,将 -0.0
转换为 0.0
。
如何
使用 UnsignedF64::new
创建新的无符号浮点数。这将检查 f64
是否为负数,并返回一个 Option
。在 UnsignedF64
上实现了许多 f64
方法,以便在保证非负性时无需重新检查数字,例如,UnsignedF64
的平方根保证为非负,因此 sqrt
返回 UnsignedF64
。
// An example of using the UnsignedF64 type.
let point1 = (3., 4.);
let point2 = (5., 12.);
fn distance(p1: (f64, f64), p2: (f64, f64)) -> UnsignedF64 {
let x = p1.0 - p2.0;
let y = p1.1 - p2.1;
(UnsignedF64::square(x) + UnsignedF64::square(y)).sqrt()
}
let d = distance(point1, point2);
println!(
"The distance between {:?} and {:?} is {}",
point1, point2, d
);
待办事项
- 实现我不确定是否可以返回负数的那些方法
- 为
std::ops::Rem
实现UnsignedF64
- 为
&UnsignedF64
实现特性 - 实现 serde 的序列化和反序列化(使用特性?)