Avoid double rounding materials when limiting products made

We can make actual = roundavg(material_consume * prodeff) products.

When we reduce actual, we have to reduce material_consume, too.  Code
does that like this:

    material_consume = roundavg(actual' * material_consume / actual)

Double rounding.  Do this instead:

    material_consume = roundavg(actual' / prodeff)
This commit is contained in:
Markus Armbruster 2013-05-04 17:54:37 +02:00
parent 87b29f784d
commit ec60098c36

View file

@ -122,15 +122,14 @@ produce(struct natstr *np, struct sctstr *sp, short *vec, int work,
if (actual <= 0) if (actual <= 0)
return 0; return 0;
if (actual > 999) { if (actual > 999) {
material_consume = roundavg(999.0 * material_consume / actual);
actual = 999; actual = 999;
material_consume = roundavg(actual / prodeff);
} }
if (vec[item] + actual > ITEM_MAX) { if (vec[item] + actual > ITEM_MAX) {
material_consume = roundavg((double)(ITEM_MAX - vec[item]) actual = ITEM_MAX - vec[item];
* material_consume / actual); material_consume = roundavg(actual / prodeff);
if (material_consume < 0) if (material_consume < 0)
material_consume = 0; material_consume = 0;
actual = ITEM_MAX - vec[item];
if (sp->sct_own && !player->simulation) if (sp->sct_own && !player->simulation)
wu(0, sp->sct_own, wu(0, sp->sct_own,
"%s production backlog in %s\n", "%s production backlog in %s\n",