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-PosInfiniteNegInfinite-NegInfinite
- 乘法
- 零 *
PosInfinite - 零 *
NegInfinite
- 零 *
- 除法
- 非零 /
PosInfinite - 非零 /
NegInfinite PosInfinite/ 零NegInfinite/ 零PosInfinite/PosInfinitePosInfinite/NegInfiniteNegInfinite/PosInfiniteNegInfinite/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