包含内置epsilon的浮点类型

时间:2013-02-13 17:44:10

标签: haskell floating-point

我正在进行一些几何计算,这需要我根据双打来比较坐标。我通常通过包含一些人工ε来处理浮点不准确性。这很常见,有很多关于这个主题的信息。

http://floating-point-gui.de/errors/comparison/

http://www.cygnus-software.com/papers/comparingfloats/comparingfloats.htm

我的想法是将Double包装在一个newtype中并使用epsilon实现Eq和Ord。这似乎是一个显而易见的概念,无论是已经完成的还是必须在Hackage的库中,或者我还没有想到的概念存在明显的错误。所以我的问题,有没有人知道包含类似类型的现有模块(我做了快速搜索,没有看到任何东西)?或者,这是一个虚假的想法?感谢。

1 个答案:

答案 0 :(得分:3)

这不是一个虚假的想法。一种方法是创建允许您编写浮点表达式的类型,为了进行评估,浮点表达式需要一段配置数据 - 即epsilon的值。这与Reader monad非常相似。

这个问题的一个很好的方法是:

http://okmij.org/ftp/Haskell/types.html#Prepose

并且可以在反射包中的hackage上找到GHC的有效实现。