# HG changeset patch # User tron # Date 1172217810 0 # Node ID f319793f05499ae107cc4466d24d525a50331857 # Parent 19b21ef194e13ab9ead18009874b85060752554b (svn r8855) -Fix Change some shift and cast mumbo jumbo for inflation calculation to something remotly comprehensible and explain what the magic number "54" means diff --git a/src/economy.cpp b/src/economy.cpp --- a/src/economy.cpp +++ b/src/economy.cpp @@ -613,18 +613,21 @@ static void AddSingleInflation(int32 *value, uint16 *frac, int32 amt) { - int64 tmp = (int64)*value * amt; - int32 low; - *frac = (uint16)(low = (uint16)tmp + *frac); - *value += (int32)(tmp >> 16) + (low >> 16); + int64 tmp = (int64)*value * amt + *frac; + *frac = GB(tmp, 0, 16); + *value += tmp >> 16; } static void AddInflation(void) { - int i; + /* Approximation for (100 + infl_amount)% ** (1 / 12) - 100% + * scaled by 65536 + * 12 -> months per year + * This is only a good approxiamtion for small values + */ int32 inf = _economy.infl_amount * 54; - for (i = 0; i != NUM_PRICES; i++) { + for (uint i = 0; i != NUM_PRICES; i++) { AddSingleInflation((int32*)&_price + i, _price_frac + i, inf); } @@ -634,7 +637,7 @@ _economy.max_loan += 50000; inf = _economy.infl_amount_pr * 54; - for (i = 0; i != NUM_CARGO; i++) { + for (uint i = 0; i != NUM_CARGO; i++) { AddSingleInflation( (int32*)_cargo_payment_rates + i, _cargo_payment_rates_frac + i,