{
double load_to_send;
if (opt::bookkeeping) { // bookkeeping
- double excess_load;
+ double excess_load; // load amount we are able to send
if (opt::egocentric)
excess_load = std::max(0.0, real_load - expected_load);
else
excess_load = real_load;
- load_to_send = compute_load_to_send(std::min(excess_load,
- nb.get_debt()));
+
+ double balance = nb.get_debt() - nb.get_credit();
+ load_to_send = std::min(excess_load,
+ std::max(0.0, balance));
+
+ // adjust load to send (rounding, truncation, etc.)
+ load_to_send = compute_load_to_send(load_to_send);
if (load_to_send > 0.0)
nb.set_debt(nb.get_debt() - load_to_send);
} else { // !bookkeeping