-1

私のコード:

balance = 320000
annualInterestRate = 0.2

originalBalance = balance
month = 1
monthly_interest = annualInterestRate / 12
low = originalBalance/12
high = (originalBalance*(1 + monthly_interest)**12)/12
epsilon = 0.01
min_payment = (high + low)/2.0

while min_payment*12 - originalBalance > epsilon:
    while month < 13:
        balance = (originalBalance - min_payment)/10 * (1+ monthly_interest)
        if balance <= 0.00:
            low = min_payment
            min_payment = (high + low)/2.0
        elif balance > 0.00:
            high = min_payment
            min_payment = (high + low)/2.0
        month += 1
print "Lowest payment: " + str(round(min_payment, 2))

ただし、実際には 29157.09 を取得するはずなのに、26666.0 を取得します。私は何を間違っていますか?

4

3 に答える 3

2

リセットするのを忘れましたmonth— 一度 に到達する13と、内側のループは二度と実行されません。

balance = 320000
annualInterestRate = 0.2

originalBalance = balance
month = 1
monthly_interest = annualInterestRate / 12
low = originalBalance/12
high = (originalBalance*(1 + monthly_interest)**12)/12
epsilon = 0.01
min_payment = (high + low)/2.0

while min_payment*12 - originalBalance > epsilon:
    month = 1          # < -- do this
    while month < 13:
        balance = (originalBalance - min_payment)/10 * (1+ monthly_interest)
        if balance < 0.00:
            low = min_payment
            min_payment = (high + low)/2.0
        elif balance > 0.00:
            high = min_payment
            min_payment = (high + low)/2.0
        month += 1
print "Lowest payment: " + str(round(min_payment, 2))
于 2013-02-25T22:20:07.557 に答える
0

私が見ていると思う間違いは、あなたが言うことですhigh = (originalBalance*(1 + monthly_interest)**12)/12。これが行うことはhigh、残高に 1 と利息の合計を掛けた値に設定されます。これで問題ありません。ただし、その数値を 12 乗してから 12 で割ります。コードでは、balance = 3000. これに 2 パーセントを足すと 3060 になります。この数を 12 乗すると、6.74 e + 41 を超えます。この数はわかりません。これを 12 で割ると、やはり 5.61 e + 40 です。この数値は長すぎて、プログラムがクラッシュします (または信じられないほど遅くなります)。これは、他の何かが機能する前に変更する必要があります。

于 2013-02-25T22:24:28.473 に答える