Haskell中是否存在带错误库的值?

时间:2013-10-25 20:29:04

标签: haskell

我正在寻找一个提供'带错误值'的库(例如x±y)。但是搜索“Haskell xyz Error”只会产生错误处理库。

我希望这样的库可以在适当的地方提供常见的数学运算(NumFloating)。用例是根据噪声传感器读数从计算中获得误差估计值。

更新

我做了一些研究,出现了“propagation of uncertainty”一词。我发现uncertainly-haskell我很快就会尝试。还有其他这样的套餐吗?

3 个答案:

答案 0 :(得分:5)

查看intervals包。

答案 1 :(得分:2)

Data.Eq.Approximate模块似乎适合于获得近似相等。

  

Data.Eq.Approximate

     

内容   输入包装器   容差类型注释的类   绝对宽容   相对容忍度   零容忍   使用数字的容差注释   这个模块的目的是提供newtype包装器,它允许一个人有效地覆盖一个值的等于运算符,使它>是近似的而不是精确的。例如,类型

     

类型ApproximateDouble = AbsolutelyApproximateValue(数字五)Double   为包含双精度的包装器定义一个别名,如果两个双精度等于精度的五位小数,则两个双精度相等;对于>例如,我们有

     

1 ==(1 + 10 ^^( - 6):: ApproximateDouble)   评估为True。请注意,我们不需要包装值1 + 10 ^^( - 6),因为AbsolutelyApproximateValue是Num的实例。对于>方便,Num以及许多其他数值类如Real和Floating都是为>中定义的包装器派生的。这个包可以方便地使用包装的值,就像使用值本身一样。

     

这个包提供了两种包装。

答案 2 :(得分:0)

uncertain包似乎提供了您正在寻找的内容:

自述文件中的一些亮点:

  

提供用于操纵固有数字的工具   实验/测量不确定性,并传播它们   基于统计学原理的职能。

  

使用错误传播进行操作

ghci> let x = 1.52 +/- 0.07
ghci> let y = 781.4 +/- 0.3
ghci> let z = 1.53e-1 `withPrecision` 3

ghci> cosh x
2.4 +/- 0.2

ghci> exp x / z * sin (y ** z)
10.9 +/- 0.9

ghci> pi + 3 * logBase x y
52 +/- 5

  

创建数字

ghci> 1.52 +/- 0.07
1.52 +/- 7.0e-2

ghci> fromSamples [12.5, 12.7, 12.6, 12.6, 12.5]
12.58 +/- 7.0e-2

  

比较

     

请注意,这与其他类似的库有很大不同   数据类型(例如来自intervalsrounding);这些没有   试图保持间隔或简单的数字精度;他们改为   旨在用实际的实验和测量数据建模   他们的不确定性,并将功能应用于数据   不确定性并用声音正确传播错误   统计原则。

     

有一个明显的例子,请

> (52 +/- 6) + (39 +/- 4)
91.0 +/- 7.0
     

在像intervals这样的库中,这会产生91 +/- 10   (即,下限为46 + 35,上限为58 + 43)。   但是,有了实验数据,两个独立样本中的错误   倾向于“抵消”,并导致总体不确定性   在大约7的总和。