3

我正在做一些几何计算,这需要我比较基于双精度的坐标。我通常通过包含一些人工 epsilon 来处理这种情况下的浮点不准确性。这很常见,并且有很多关于此主题的信息。

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

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

我的想法是将 Double 包装在一个新类型中,并使用 epsilon 实现 Eq 和 Ord。这似乎是一个如此明显的概念,要么它已经完成并且必须在 Hackage 的库中,要么我还没有想到这个概念明显有问题。所以我的问题是,有谁知道包含类似类型的现有模块(我快速搜索并没有看到任何内容)?或者,这是一个虚假的想法?谢谢。

4

1 回答 1

3

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

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

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

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

于 2013-02-13T17:55:20.490 回答