I found NEW firaxian code in the SDK, they used an array there, initialized as [NUM_CITY_PLOTS] now this is defined as 21, when you use extended, you have 37city plots, secondly, it'll loop over the extended 37plots, although the array only has 21entries...so the moment eBuild is requested by the getImprovement or getYield, it works pretty good untill entry 21, after that, no programmer in the world knows what will happen, the result depends from computer to computer, same as in c++ float a = 8/9, this can result in
0.888888888888888888888888888888888 on one computer
or
0.888888888888888888888888888888889 on the other computer
or
0.88888888888888888888888 on a third computer where the accuracy is lower...so if you use this code as in
if ( a == 0.88888888888) it'll work on all 3 computers(if you round a to the same length)
write
if ( a == 0.888888888888888888888888888888888), 2nd and 3rd will say it isn't true, the first will say it is true, the code is the same, but the result varies on all 3computers..the array thing is different of course, but I'll hope above example makes at least clear, the same code on 3different computers doesn't mean the result is the same..depends on alot of things...that's what made this CTD so random..every comp looks at some point in the memory, and whatever it gets from there, will be used, and if it's not that what the following code needs, it can produce anything, hence CTD
add, the 3rd....if ( a == 0.888888888888888888888888888888888), might actually say it is or isn't true, depends if your code "Cuts" the 8888 after the accuracy or if it rounds..there's again a difference...depends on compiler, computer, etc..some codes are just thigns you shouldn't do...generally, noone uses a float in an "if"

and even firaxis doesn't do so...but i just want to point out, results for the same code on several machines are not the same, every machine can have it's own result, so random CTD