You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用while循环计算金额翻倍时长的代码错误排查与浮点数疑问

问题分析与修复方案

首先,你的代码出现inf和超大计数的核心原因是循环条件完全写错了——你用while x < 2*x:作为循环判断,这在x是正数的情况下永远成立(毕竟两倍的本金肯定比本金本身大),导致循环无限执行:

  • 每次循环x都会乘以(1+y),直到它超出浮点数的最大表示范围,变成inf(无穷大);
  • 当x变成inf后,inf < 2*inf会被判定为False(因为无穷大的两倍还是无穷大),循环才会终止,这时候count已经累加到了一个离谱的数值。

修复后的代码

你需要先把初始本金存下来,用它来判断当前本金是否已经翻倍。另外,建议避免用eval处理输入(有安全风险),直接用float转换更稳妥:

def main():
    initial_principal = float(input("Initial Principal: "))
    interest_rate = float(input("Interest rate: "))
    
    current_amount = initial_principal
    years = 0
    
    while current_amount < 2 * initial_principal:
        current_amount *= (1 + interest_rate)
        years += 1
    
    print(f"Final amount: {current_amount:.2f}")
    print(f"Years to double: {years}")

main()

关于小本金小利率的浮点数问题

你的原代码不管本金和利率多大,都会因为循环条件错误无限运行,直到x变成inf。而修复后的代码,即使是本金=1、利率=0.05的情况,也能正常运行:

浮点数的精度误差确实存在,但对于这个场景来说影响极小——比如当current_amount非常接近两倍初始本金时,可能会多循环一次,但计算出的年份是符合实际复利逻辑的,完全可以满足练习的需求。

内容的提问来源于stack exchange,提问作者mathshungry

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:39:35