0

これが私が現在持っているコードで、すべてが意図したとおりに機能していますが、累積合計が機能しておらず、絶対に愚かなことをしていると確信しています。

assume period = 20
assume inflation = 3
assume nightlycost = 100
assume nights = 7

$yearlycost = $nightlycost*$nights;
while ($period > 0) {
    $period = $period-1;
    $yearlyincrease = ($inflation / 100) * $yearlycost;
    $nightlyincrease = ($inflation / 100) * $nightlycost;
    $nightlycost = $nightlycost + $nightlyincrease;
    $yearlycost = ($yearlycost + $yearlyincrease) + $yearlycost;
}

Result:
Nightly Hotel Rate in 20 years: $180.61 - <?php echo round($nightlycost, 2); ?> correct

Weekly Hotel Rate in 20 years: $1264.27 - <?php echo round($nightlycost, 2) * 7; ?> correct

Total cost to you over 20 years: $988595884.74 - <?php echo round($yearlycost, 2); ?> incorrect

年間の累積コストを除いて、すべてが正しく、期待どおりに出力されます。前の年間コストを取り、その年のコスト+インフレを追加する必要があります。

例:1年目は700であるため、2年目は700 + 700 + 21(21は3%、その年のインフレ)である必要があります。したがって、2年目の累積合計は1421です。3年目は1421 + 721(昨年の合計)+ 721の3%になります。

うまくいけば、これは私がどこで間違っているのかをあなたが見るのに十分明確です。ありがとう!

4

1 に答える 1

1

コードがどこで間違っているのか理解するのは難しいと思いますが、私の直感では、ループ本体の最後の行に乗算が必要です。

基本的に、期間0の基本コストがあります。次に、X年後のインフレが与えられた場合の累積コストを計算します。そのコストは(擬似コード)です

base = nightlycost + nights
infl = 1.03
cumulative = base + base*infl + base*infl^2 + base*infl^3 + ... + base*infl^periods

最後の式は次のように簡略化できます

cumulative = base*((1-infl^periods)/(1-infl))

(これは、ここの式4に従って成り立ちます:http://mathworld.wolfram.com/ExponentialSumFormulas.html

例:

$base = 100*7;
$infl = 1.03; // 3% of inflation/year

$periods = 2;
$cumulative = $base * (1-pow($infl, $periods))/(1-$infl);
print "Cumulative cost after $periods is $cumulative\n";

// Let's try with three periods.
$periods = 3;
$cumulative = $base * (1-pow($infl, $periods))/(1-$infl);
print "Cumulative cost after $periods is $cumulative\n";

出力:

Cumulative cost after 2 is 1421
Cumulative cost after 3 is 2163.63
于 2012-09-17T13:31:55.967 に答える