我有一个表示表达式的 AST,我想通过在不损失精度的情况下评估一些节点来简化它。我发现 decimal.Decimal
模块可能对此有用,但是我已经偶然发现了一个问题:结果似乎还是根据 decimal.getcontext().prec
进行了四舍五入:
>>> a = decimal.Decimal('1.000000000000000000000000000000000000000001')
>>> b = decimal.Decimal('1.000000000000000000000000000000000000000001')
>>> a+b
Decimal('2.000000000000000000000000000')
有没有办法让 decimal.Decimal
在可能的情况下找出准确存储结果所需的精度(即不包括除法和根)?
对于除法和根,我希望能够找出结果是否确实准确,可能是通过执行反向运算(乘法)并检查结果是否等于起始操作数。有没有更好的方法?