4 个版本
0.2.1 | 2019年9月2日 |
---|---|
0.2.0 | 2019年9月2日 |
0.1.1 | 2019年8月27日 |
0.1.0 | 2019年8月27日 |
#1928 在 算法
22KB
406 行
不确定性
不确定性(Unc)或不确定度是一种表示数值的方法,其中真实值未知。不确定度可以使用绝对不确定度(AbUnc::new())或相对不确定度(RelUnc::new)来表示。
它们可以看起来像这样
绝对:14.6 ± 0.2 mm
相对:14.7 ± 0.01369%
通过检查可以看出,这两个测量值实际上是相等的,尽管它们的数值略有不同。这是因为当考虑到不确定度值时,这两个测量值之间存在一些重叠。这可以按以下方式确定
use uncertainty::*;
let one = AbUnc::new(14.6, 0.2);
let two = RelUnc::new(14.7, 0.01369);
assert!(one.overlap(&two));
还支持更多的算术运算;绝对不确定度可以相加和相减,相对不确定度可以相乘和相除。相对不确定度也可以被提升到幂。要在这两种类型之间进行转换,可以使用不确定性特质。
use uncertainty::*;
use approx::assert_abs_diff_eq;
let one = AbUnc::new(14.6, 0.2);
let two = RelUnc::new(14.7, 0.01369);
let three = RelUnc::new(2.0, 0.05);
let eq: AbUnc = one + two.to_ab();
let eq: RelUnc = eq.to_rel() * three;
assert_abs_diff_eq!(eq.val(), 58.6, epsilon = 0.0000001);
assert_abs_diff_eq!(eq.unc(), 0.0636943, epsilon = 0.0000001);
类型之间的转换也可以通过 From 特质来完成
let x: AbUnc = RelUnc::new(2.0, 0.1).into();
assert_abs_diff_eq!(x.unc(), 0.2);
let y = AbUnc::from(2.0);
assert_abs_diff_eq!(y.val(), 2.0);
assert_abs_diff_eq!(y.unc(), 0.0);
使用 From 特质创建不确定性值将导致其值中具有零不确定度。这是系统内处理标量值进行算术运算时应采取的方式。
可以编写一个函数,该函数使用不确定性特质接受绝对或相对不确定性
fn print<T: Uncertainty>(x: T) {
let x = x.to_ab();
println!("The value is: {}, and the uncertainty is: {}!", x.val(), x.unc());
}
print(AbUnc::from(10.0));
print(RelUnc::from(20.0));
但是,如果您只想接受特定的相对或绝对不确定值,可以通过使用 AbUnc 和 RelUnc 类型来实现
fn print_ab(x: AbUnc) {
println!("The value of this absolute uncertainty is: {}", x.val());
}
print_ab(AbUnc::new(14.7, 0.02));
许可证:MIT
依赖项
~165KB