上一篇文章探讨了连续复利和大量离散复利之间的区别。该区别是使用以下 Python 函数计算的。
def f(P,n,r):返回P *(exp(r)-(1 + r / n)** n)
其中函数参数是本金、复利次数和利率。
当我玩这个的时候我注意到
f(1000000, 365*24*60*60, 0.12)
返回负值 -0.00066。如果这是正确的,那就意味着每秒复利一次利率为 12% 的贷款比连续复利产生的利息更高。但这不可能发生。更频繁地复利只会增加利息。
该 Python 函数的问题在于,当n非常大时,exp( r ) 和 (1 + r / n ) n非常接近,以至于它们的减法会导致精度完全丧失,这种现象被称为灾难性抵消。在浮点计算的极限范围内,这两个术语是无法区分的,因为当n趋向无穷大时,前者是后者的极限。
一种计算方法
指数( r )-(1 + r / n ) n
对于中等大小的r (例如典型的利率)和非常大的n (例如一年中的秒数),将写出 exp( r ) 的幂级数,使用二项式定理展开 (1 + r / n ) n ,然后减去。
然后我们发现
exp( r ) − (1 + r / n ) n ≈ r ² / 2 n
是一个很好的近似值。
当n = 365 × 24 × 60 × 60 且r = 0.12 时,近似值为 2.28 × 10 −10 ,正确结果为 2.57 × 10 −10 。该近似值仅保留一位有效数字,但符号和数量级均正确。为了提高精度,可以保留更多级数项。
带有利息计算的数值问题一文最先出现在John D. Cook上。
原文: https://www.johndcook.com/blog/2025/07/20/interest-tech-note/