- if (opt::bookkeeping) {
- load_to_send = std::min(real_load, nb.get_debt());
- if (load_to_send >= opt::min_transfer_amount) {
+ if (opt::bookkeeping) { // bookkeeping
+ 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;
+
+ 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)