#relative #absolute #arithmetic #float #arithmetic-operations #uncertain

不确定性

一个库,允许创建和执行带有不确定数值的算术运算

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算法

MIT 许可证

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