6 个版本
0.3.2 | 2020 年 11 月 25 日 |
---|---|
0.3.1 | 2020 年 10 月 21 日 |
0.2.0 | 2020 年 10 月 12 日 |
0.1.1 | 2020 年 10 月 12 日 |
在 数学 类别下排名第 625
每月下载量 22 次
用于 prepona
61KB
581 行代码(不包括注释)
幅度 - 从无穷大到更远!
当您需要使用像 Dijkstra 最短路径算法 或 Floyd-Warshall 算法 这样的算法,这些算法需要无穷大值才能优雅地编写时,此 crate 非常有用。
一个简单的例子可以是找到一个向量中的最大值
use magnitude::Magnitude;
fn find_max(vec: &Vec<Magnitude<i32>>) -> Magnitude<i32> {
let mut max = Magnitude::NegInfinite;
for val in vec {
if *val > max {
max = *val;
}
}
max
}
let vec: Vec<Magnitude<i32>> = vec![2.into(), 3.into(), 6.into(), (-10).into()];
assert_eq!(find_max(&vec), 6.into());
您可以在幅度上执行所有 有效 的比较(==、!=、>、<、>=、<=)和算术(+、-、*、/、+=、-=、*=、/=)操作。
以下列出了无效操作,这意味着任何其他操作都是有效的。
无效操作
- 比较
- 两个
PosInfinite
- 两个
NegInfinite
- 两个
- 算术
- 加法
PosInfinite
+NegInfinite
- 减法
PosInfinite
-PosInfinite
NegInfinite
-NegInfinite
- 乘法
- 零 *
PosInfinite
- 零 *
NegInfinite
- 零 *
- 除法
- 非零 /
PosInfinite
- 非零 /
NegInfinite
PosInfinite
/ 零NegInfinite
/ 零PosInfinite
/PosInfinite
PosInfinite
/NegInfinite
NegInfinite
/PosInfinite
NegInfinite
/NegInfinite
- 非零 /
- 加法
幅度与 f64
和 f32
无穷大的关系
自0.2.0版本起,将f64::INFINITY
、f64::NEG_INFINITY
、f32::INFINITY
和f32::NEG_INFINITY
视为无穷大
use magnitude::Magnitude;
let pos_inf: Magnitude<f64> = f64::INFINITY.into();
let neg_inf: Magnitude<f64> = f64::NEG_INFINITY.into();
assert!(pos_inf.is_pos_infinite());
assert!(neg_inf.is_neg_infinite());
let pos_inf: Magnitude<f32> = f32::INFINITY.into();
let neg_inf: Magnitude<f32> = f32::NEG_INFINITY.into();
assert!(pos_inf.is_pos_infinite());
assert!(neg_inf.is_neg_infinite());
发布
- 0.3.2版本:强制使用
Copy
代替Clone
。 - 0.3.1版本:修复了is_finite()的错误。
- 0.3.0:
- 添加
from_vec
,可以从值向量构建Magnitude
向量use magnitude::Magnitude; let magnitude_vec = Magnitude::from_vec(&vec![1,2,3]); assert_eq!(magnitude_vec[0], 1.into()); assert_eq!(magnitude_vec[1], 2.into()); assert_eq!(magnitude_vec[2], 3.into());
- 添加
unwrap
以方便访问Finite
内的值use magnitude::Magnitude; let one: Magnitude<i32> = 1.into(); assert_eq!(one.unwrap(), 1);
- 添加
- 0.2.0版本:正确处理
f64::INFINITY
、f64::NEG_INFINITY
、f32::INFINITY
和f32::NEG_INFINITY
特别感谢@niklasmohrin和@smarnach
依赖项
~155KB