
144 Chapter 8
if (ftemp>
1.e-20){
tmult = avgfitness / ftemp ;
tconst = -minfitness * avgfitness / ftemp ;
}
else {
tmult = 1.0 ;
tconst = 0.0 ;
}
}
The scaling factors have been computed. Do the scaling now. The
truncation at zero is theoretically unnecessary, as we avoided negatives
when we computed the scaling factor above. However, floating point
problems can sometimes still produce a 'negative zero'. In deference to
possible user modifications which DEMAND nonnegative fitnesses, it is
good programming practice to enforce this.
avgfitness = 0.0 ;
for (individualo ; individual<popsize ; individual·^) {
fit = tmult * fitnesspndividual] + ...