use*_*177 4 floating-point parsing haskell floating-accuracy attoparsec
我使用attoparsec的内置解析器'double'和'number'来解析浮点值,我从不同的解析器得到不同的结果.
>解析号码"8.918605790440055e-2"
完成""8.918605790440054e-2
>解析双"8.918605790440055e-2"
完成""8.918605790440055e-2
使用'number'解析器似乎失去了一些精度,而'double'解析器却没有.因为'double'解析器设法做到这一点,因此可以将8.918605790440055e-2表示为double,为什么'number'解析器会返回不同的结果?这是一个错误吗?
我使用的是attoparsec 0.10.4.0.
dav*_*420 12
好吧,让我们来看看文档.
注意:此功能几乎快十倍
rational,但准确度稍差.该
Double类型支持大约16位小数的精度.对于94.2%的数字,此函数rational给出相同的结果,但对于剩余的5.8%,此函数在小数点后15位处丢失精度.对于0.001%的数字,此函数将在第13或第14位小数处丢失精度.
注意:此功能几乎快十倍
rational.在积分输入上,它给出了完全准确的答案,而对于浮点输入,它的准确性略低于理性.
它们都被认为是稍微不准确(以换取相对快速).number不准确的不准确,所以它的不准确性与不一样的事实double不是一个错误.
如果准确性至关重要,请使用rational.