当前位置:  开发笔记 > 编程语言 > 正文

十进制模块中的重要数字

如何解决《十进制模块中的重要数字》经验,为你挑选了1个好方法。

所以我决定尝试通过编写一些python脚本来解决我的物理作业来为我解决问题.我遇到的一个问题是,重要的数字似乎并不总能正常出现.例如,它可以正确处理重要数字:

from decimal import Decimal
>>> Decimal('1.0') + Decimal('2.0')
Decimal("3.0")

但这不是:

>>> Decimal('1.00') / Decimal('3.00')
Decimal("0.3333333333333333333333333333")

所以有两个问题:

    我是对的,这不是预期的有效数字量,还是我需要刷数字数字?

    有没有办法做到这一点,而无需手动设置小数精度?当然,我确信我可以使用numpy来做到这一点,但我只是想知道是否有一种方法可以用好奇心来处理十进制模块.

Fredrik Joha.. 8

将小数点工作精度更改为2位数不是一个好主意,除非您绝对只执行单个操作.

您应始终以高于重要性水平的精度执行计算,并且仅围绕最终结果.如果执行长序列计算并四舍五入到每一步的有效位数,则会累积错误.十进制模块不知道任何特定操作是长序列中的一个还是最终结果,因此它假定它不应该超过必要的舍入.理想情况下它会使用无限精度,但这太贵了,因此Python开发人员确定了28位数.

一旦你到达最终结果,你可能想要的是量化:

>>> (Decimal('1.00') / Decimal('3.00')).quantize(Decimal("0.001"))
Decimal("0.333")

您必须手动跟踪重要性.如果要进行自动重要性跟踪,则应使用区间运算.有一些可用于Python的库,包括pyinterval和mpmath(它支持任意精度).使用十进制库实现区间运算也很简单,因为它支持有向舍入.

您可能还想阅读十进制算术常见问题:十进制算术'重要'算术?



1> Fredrik Joha..:

将小数点工作精度更改为2位数不是一个好主意,除非您绝对只执行单个操作.

您应始终以高于重要性水平的精度执行计算,并且仅围绕最终结果.如果执行长序列计算并四舍五入到每一步的有效位数,则会累积错误.十进制模块不知道任何特定操作是长序列中的一个还是最终结果,因此它假定它不应该超过必要的舍入.理想情况下它会使用无限精度,但这太贵了,因此Python开发人员确定了28位数.

一旦你到达最终结果,你可能想要的是量化:

>>> (Decimal('1.00') / Decimal('3.00')).quantize(Decimal("0.001"))
Decimal("0.333")

您必须手动跟踪重要性.如果要进行自动重要性跟踪,则应使用区间运算.有一些可用于Python的库,包括pyinterval和mpmath(它支持任意精度).使用十进制库实现区间运算也很简单,因为它支持有向舍入.

您可能还想阅读十进制算术常见问题:十进制算术'重要'算术?

推荐阅读
吻过彩虹的脸_378
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有