parsing - attoparsec 错误解析 double

标签 parsing haskell floating-point floating-accuracy attoparsec

我正在使用 attoparsec 的内置解析器“double”和“number”来解析浮点值,我从不同的解析器得到不同的结果。

>parse number "8.918605790440055e-2"

Done "" 8.918605790440054e-2

> parse double "8.918605790440055e-2"

Done "" 8.918605790440055e-2


使用“数字”解析器似乎会失去一些精度,而“双”解析器则不会。由于可以将 8.918605790440055e-2 表示为 double,因为“double”解析器设法做到了,为什么“number”解析器返回不同的结果?这是一个错误吗?
我正在使用 attoparsec 0.10.4.0。

最佳答案

It is intentional :

Note: This function is almost ten times faster than rational. On integral inputs, it gives perfectly accurate answers, and on floating point inputs, it is slightly less accurate than rational.


attoparsec默认以速度换取精度,如果您需要完全准确的解析,则必须使用较慢的 rational解析器。

结果的差异非常小,以至于对于大多数目的而言,这无关紧要,因此总体而言,更快的默认解析器可能会获得更大的胜利。

关于parsing - attoparsec 错误解析 double ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15298961/

相关文章:

使用 Cabal 从 C 调用 Haskell

haskell - 如何在 Haskell 中正确实现辅助函数

floating-point - STM32F4探索板如何将float数据写入Flash中

在c中将char转换为float

php - PHP解析/语法错误;以及如何解决它们

python - 在Python中并行读取多个文件

haskell - "Bootstrapping"与 cabal

objective-c - 如何暂停 objective-c 不到一秒的时间

python - 从大文件中剥离 html 比 BeautifulSoup 更快/更少的资源破坏方式?或者,使用 BeautifulSoup 的更好方法?

java - JAVA中解析二维数组的JSON