因此,我决定尝试编写一些python脚本来解决我的问题,从而解决物理作业。我遇到的一个问题是,重要的数字似乎并不总是正确地出现。例如,这可以正确处理重要数字:
from decimal import Decimal >>> Decimal('1.0') + Decimal('2.0') Decimal("3.0")
但这不是:
>>> Decimal('1.00') / Decimal('3.00') Decimal("0.3333333333333333333333333333")
有两个问题:
将小数位工作精度更改为2位 不是 一个好主意,除非您绝对只打算执行一个操作。
您应始终以比重要性水平更高的精度执行计算,并且仅舍入最终结果。如果执行长序列的计算并在每一步四舍五入到有效位数,则会累积错误。十进制模块不知道任何特定的操作是长序列中的一个还是最终结果,因此它假定它的舍入不应超过必要的范围。理想情况下,它将使用无限精度,但这太昂贵了,因此Python开发人员只能使用28位数字。
获得最终结果后,可能需要量化:
>>>(Decimal('1.00')/ Decimal('3.00'))。quantize(Decimal(“ 0.001”)) 小数(“ 0.333”)
您必须手动跟踪重要性。如果要进行自动重要性跟踪,则应使用间隔算法。有一些适用于Python的库,包括pyinterval和mpmath(支持任意精度)。用十进制库实现区间算术也很简单,因为它支持定向舍入。
您可能还需要阅读小数算法常见问题解答:小数算法是“重要性”算术吗?