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:
parent
87b29f784d
commit
ec60098c36
1 changed files with 3 additions and 4 deletions
|
@ -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",
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue