C中的投资循环

时间:2019-07-03 20:58:19

标签: formula

我正在尝试在C语言中创建一个复利循环,该循环使用一个数组来保存多个正收益率(代表收益)和负收益率(代表亏损)的回报率。

因此,您从本金开始,并从一系列利率中随机分配了一个利率。

我在for循环中使用了if/else来确定速率是正数还是负数,以及下一步该怎么做。我的问题是,当我运行它时,好像我在else位(负利率或亏损)中的金额变量没有被更新。这是指针问题还是我完全错过了其他东西?

int main()
{
    int year;
    double amount, rate, principal = 100.0;
    double rates[10] = {0.025, 0.05, 0.075, 0.1, 0.125, 0.15, -0.25, -0.2, -0.15, -0.1};

    for(year = 1; year <= 100; year++)
    {
        rate = rates[rand() % 10];

        if(rate > 0.0)
        {
            amount = principal * pow(1.0 + rate, year);
        }
        else 
        {
            rate *= -1;
            amount = principal - (principal*rate);
        }

        printf("%4d%21.2f\n", year, amount);
    }
    return 0;
}

1 个答案:

答案 0 :(得分:1)

您的代码没有意义。

这个想法似乎是模拟一个金融帐户在100年期间的损益,并且每年以随机利率计算年复利。否则,在循环的每次迭代中计算新的随机率就没有意义。但是其他任何计算都没有道理。

让我们首先考虑正利率情况。对于年度复利,每年总余额(本金加累计利息)以选定的利率赚取利息。一年,那是

amount *= (1.0 + rate);

相反,您每年都会重新计算该金额,就好像直到该年份为止的所有年份都按该年的利率获得利息。这不仅是错误的,而且是没有意义的:由于每次迭代都会在不考虑其先前值或先前迭代的任何其他结果的情况下重新计算该量,因此仅执行循环的最后一次迭代就可以得到相同的结果。

现在考虑负利率情况。您再次基于本金而不是当前金额进行计算,因此假设我们先解决该问题,然后结合利率否定法:

        amount = amount - (amount * (-rate));

让我们对此进行一些代数:

        amount = amount + (amount * rate);

还有一点让我们进入

        amount = amount * (1.0 + (1.0 * rate));

,与

相同
        amount *= (1.0 + rate);

。现在我在哪里看过?

因此,您在两种选择中都进行了错误的计算,因此您一开始就不需要单独的选择。

请注意,所有这些前提都假设您将amount初始化为等于循环前的principal (否则,委托人将不会进来。)