changeset 6119:f319793f0549 draft

(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
author tron <tron@openttd.org>
date Fri, 23 Feb 2007 08:03:30 +0000
parents 19b21ef194e1
children 845a461bb07b
files src/economy.cpp
diffstat 1 files changed, 10 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- 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,