-2

二分検索を使用して見つける方法を見つけようとしています:

ローン金額を清算するための毎月の支払い

  • 月利 = (年利) / 12
  • 毎月の支払い下限 = 残高 / 12
  • 月々のお支払い上限額=(残高×(1+月々の金利)12)÷12

現時点で私は持っています:

balance = 6758
annualInterestRate = 0.20
monthlyRate = annualInterestRate/12
numGuesses = 0
lo = balance/12
hi = (balance)*((1+monthlyRate)**12)/12
monthPay = (hi + lo)/2.0
NuBalance = balance
while abs((NuBalance)*(1+monthlyRate))-(monthPay) >= 0.01:
    print('low = ' + str(lo) + ' high = ' + str(hi) + ' MonthPay = ' + str(monthPay))
    numGuesses += 1
    if ((NuBalance)*(1+monthlyRate))-(monthPay) <= 0.01:
        print('Month Pay LO = ' + str(monthPay))
        lo = monthPay
    else:
        print('Month Pay HI = ' + str(monthPay))
        hi = monthPay
    monthPay = (hi + lo)/2.0
print('numGuesses = ' + str(numGuesses))
print('Month Pay = ' + str(monthPay))

私が間違っているところへの助けをいただければ幸いです。

4

1 に答える 1

2

そのはず:

while abs((NuBalance)*(1+monthlyRate)-(monthPay)) >= 0.01:
                                    ^           ^

そして常に存在する

(hi + lo)/2.0 < (NuBalance)*(1+monthlyRate)

よりも小さいためTrueですhilo(NuBalance)*(1+monthlyRate)

In [9]: print 'lo:', lo
lo: 563

In [10]: print 'hi:', hi
hi: 686.720412649

In [11]: print 'monthPay:', monthPay
monthPay: 624.860206325

In [12]: print '(NuBalance)*(1+monthlyRate):', (NuBalance)*(1+monthlyRate)
(NuBalance)*(1+monthlyRate): 6870.63333333
于 2012-10-11T10:40:52.417 に答える