anchor.diff:      NextP0E = PrevP0E * (1 - ThisP1E),
       ThisP1E_real =
           trivial_worst_case_failprob(SigSize, BucketSize, MyActualItemsCount, ExpDelta),
  -    NextP0E_real = PrevP0E_real * (1 - ThisP1E_real),
  +    % pay attention to floating point issues near 1:
  +%%     NextP1E_real = 1 - (1 - PrevP1E_real) * (1 - ThisP1E_real),
  +    NextP1E_real = PrevP1E_real + ThisP1E_real - PrevP1E_real * ThisP1E_real,
   %%     log:pal("merkle_receive [ ~p ] (rest: ~B):~n  bits: ~p, P1E: ~p vs. ~p~n  P0E: ~p -> ~p",
   %%             [self(), NumRestLeaves, {SigSize, VSize}, P1E_next, P1E_p1, PrevP0E, NextP0E]),
       % we need to know how large a piece is
  
positive.code:     P1E_p1_bf_I_real = bloom_worst_case_failprob(BF, OtherBFCount, ExpDelta),
      MyNrChecks = ?IIF(OtherBFCount =:= 0, 0, MyItemCount),
      P1E_p1_bf_NI_real = bloom_worst_case_failprob(OtherBF, MyNrChecks, ExpDelta),
      P1E_p1_real = 1 - (1 - P1E_p1_bf_I_real) * (1 - P1E_p1_bf_NI_real),
      % NOTE: use left-over P1E after phase 1 (bloom) for phase 2 (trivial RC)
      P1E_p2 = calc_n_subparts_p1e(1, P1E, (1 - P1E_p1_real)),
      ?ALG_DEBUG("I:~.0p, P1E_bf=~p~n"
  
negative.code:     {OBucketTree, _OrigDBChunkLen, VSize} =
          decompress_kv_list({OBucketKBin, OBucketVBin}, SigSize),
      {NHashesK, NHashesV, OBucketTree, BucketSize, SigSize, VSize,
       NextP0E, NextP1E_real}.
  
  %% @doc Creates a compact binary consisting of bitstrings with trivial
  %%      reconciliations for all sync requests to send.
  