首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >attoparsec不正确的双数解析

attoparsec不正确的双数解析
EN

Stack Overflow用户
提问于 2013-03-08 16:39:54
回答 2查看 516关注 0票数 4

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

解析号"8.918605790440055e-2“ 已订“8.918605790440054e-2 解析双"8.918605790440055e-2“ 已订“8.918605790440055e-2

使用'number‘解析器似乎失去了一些精度,而'double’解析器却没有。因为有可能将8.918605790440055e-2表示为一个双,因为“double”解析器成功地做到了这一点,为什么'number‘解析器返回不同的结果?这是个虫子吗?

我正在使用attoparsec 0.10.4.0。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-03-08 17:09:38

好吧,让我们看看the documentation

  • double 注意:这个函数的速度几乎是rational的十倍,但精度稍低。 Double类型支持大约小数点16位的准确性。对于94.2%的数字,该函数和rational给出了相同的结果,但对于其余的5.8%,该函数在小数点15位附近丢失了精度。对于0.001%的数字来说,这个函数将在小数点13或14位时失去精度。

  • number 注意:这个函数的速度几乎是rational的十倍。对于积分输入,它给出了完全精确的答案,而对于浮点输入,它的精度略低于理性。

它们都被认为是稍微不准确的(作为交换条件是相对快速)。number的不准确是没有量化的,因此它的不准确性与double的不一样这一事实并不是一个缺陷。

如果准确性是最重要的,请使用rational

票数 12
EN

Stack Overflow用户

发布于 2013-03-08 17:06:52

It is intentional

注意:这个函数比rational快十倍。对于积分输入,它给出了非常精确的答案,和浮点输入,它比rational稍差一些。

默认情况下,attoparsec用精确性来换取速度,如果您需要非常精确的解析,则必须使用速度较慢的rational解析器。

结果的差异如此之小,以至于在大多数情况下,这并不重要,所以更快的默认解析器总体上可能是一个更大的胜利。

票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15298961

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档