#相对 #算术 #绝对 #浮点 #算术运算 #不确定

已撤回 uncertainty-rs

一个允许创建和进行具有不确定值的数字算术运算的crate

0.1.0 2019年8月27日

#33 in #相对

每月 28 次下载

自定义许可

22KB
429 代码行

uncertainty-rs

Unc,或不确定,是一种表示真值未知数值的方法。不确定度可以用绝对不确定度(ab())或相对不确定度(rel())来表示。

它们可以看起来像这样

绝对:14.6 ± 0.2 毫米

相对:14.7 ± 0.01369%

检查后应该很明显,这两个测量值是相等的,尽管它们的值略有不同。这是因为当考虑不确定度值时,这两个测量值之间有一些重叠。这可以通过以下方式确定

use uncertainty_rs::*;

let one = Unc::ab(14.6, 0.2);
let two = Unc::rel(14.7, 0.01369);
assert!(one.overlap(&two));

还支持更多的算术运算;绝对不确定度可以相加和相减,相对不确定度可以相乘和相除。相对不确定度还可以被提升到 。要在这两种类型之间进行转换,可以使用 Uncertainty 特性。

use uncertainty_rs::*;
use approx::assert_abs_diff_eq;

let one = Unc::ab(14.6, 0.2);
let two = Unc::rel(14.7, 0.01369);
let three = Unc::rel(2.0, 0.05);

let eq: AbUnc = one + two.as_ab();
let eq: RelUnc = eq.as_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 = Unc::rel(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 特性创建 Uncertainty 值将导致其值中包含零不确定度。这是系统内处理标量值算术运算时应采用的方式。

可以使用 Uncertainty 特性编写一个函数,该函数接受绝对或相对不确定度

fn print<T: Uncertainty>(x: T) {
    let x = x.as_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(Unc::ab(14.7, 0.02));

依赖项

~175KB