formula - 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;
}
解决方案
你的代码没有意义。
这个想法似乎是模拟一个金融账户在 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
(否则校长根本不会介入。)
推荐阅读
- for-loop - 从go中的tcp连接读取数据是否需要for循环?
- javascript - 从javascript中的列表keyCode中拆分字符串
- access-token - 将jwt令牌存储到python烧瓶restplust中的cookie中以用于登录api
- php - Laravel 5 在 wherepivot 中检索第一条记录
- java - 从 String 到 Tuple2 的映射
在 Spark + Java 中 - prometheus - 触发多个时收到的警报中未指定警报触发节点名称
- cassandra - 如何在 Cassandra 的一个查询中从每个匹配项中选择几条记录?
- html - HTML 表单 - 不会与直线中的链接一起显示
- location - flutter google_maps_flutter 插件搜索地方的能力
- sql - Qlikview 统计过去 12 小时内的所有产品