Ваш код не имеет смысла.
Идея, по-видимому, заключается в симуляции прибыли / убытка финансового счета за 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
перед циклом. (В противном случае принципал вообще не будет входить в него.)