How about updating as below to avoid lossing accuracy if new is less than 100?
return div_u64(new * (100 - LAST_AGE_WEIGHT), 100) +
div_u64(old * LAST_AGE_WEIGHT, 100);
Thanks,
We want to avoid overflow by doing the division first. To keep the accuracy, how
about updating as below:
res = div_u64_rem(new, 100, &rem_new) * (100 - LAST_AGE_WEIGHT)
+ div_u64_rem(old, 100, &rem_old) * LAST_AGE_WEIGHT;
res += rem_new * (100 - LAST_AGE_WEIGHT) / 100 + rem_old * LAST_AGE_WEIGHT / 100;
return res;
Thanks,
Friendly ping
}
/* This returns a new age and allocated blocks in ei */