首页 > 解决方案 > C中的投资循环

问题描述

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

所以你从一个本金开始,然后从一组利率中随机分配一个利率。

if/else在我的 for 循环中使用了一个来确定汇率是正数还是负数以及下一步该做什么。我的问题是当我运行它时,好像我在 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;
}

标签: formula

解决方案


你的代码没有意义。

这个想法似乎是模拟一个金融账户在 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 (否则校长根本不会介入。)


推荐阅读