(我改成了)非常小的数字。在
经过这一转换,时间成本是相同的,但当我试图提高精度使用十进制。十进制将(2)转换为(3)时间成本爆炸式增长(约10倍)。在
有没有解决办法来减少时间和保持同样的精度?在
(1)
alpha = 1. (fyt * qyt ) / (fxt * qxt)
(2)
^{pr2}$
(3)
alpha = 10**(Decimal(fyt).log10() + Decimal(qyt).log10() - Decimal(fxt).log10() - Decimal(qxt).log10())
Tags:
有一个名为
cDecimal
的外部包,它是Decimal模块的C实现。我从来没用过,但可能想试试。在我想说这是意料之中的,因为这里有一种
10**x
的幂计算,在十进制的情况下,这意味着在每一步之后检查精度。在考虑下面的例子,很明显十进制幂运算非常昂贵:
因此,与其对(3)方程进行十进制运算,不如直接对第一个(1)进行运算:
^{pr2}$这应该足够快,因为总共只有3个操作发生,并且应该具有相同的精度,因为我们使用的是
Decimal
。在相关问题 更多 >
编程相关推荐