Skip to content

Commit

Permalink
Merge pull request #255
Browse files Browse the repository at this point in the history
83ddc94 handle unlikely rounding up after sqrt (Javier Smooth)
f2e8348 triangular distribution to choose recent outputs more often for mixins (Javier Smooth)
  • Loading branch information
fluffypony committed Apr 5, 2015
2 parents 7172bda + 83ddc94 commit 4fb0996
Showing 1 changed file with 8 additions and 1 deletion.
9 changes: 8 additions & 1 deletion src/cryptonote_core/blockchain_storage.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@

#include <algorithm>
#include <cstdio>
#include <cmath>
#include <boost/archive/binary_oarchive.hpp>
#include <boost/archive/binary_iarchive.hpp>

Expand Down Expand Up @@ -1081,7 +1082,13 @@ bool blockchain_storage::get_random_outs_for_amounts(const COMMAND_RPC_GET_RANDO
size_t try_count = 0;
for(uint64_t j = 0; j != req.outs_count && try_count < up_index_limit;)
{
size_t i = crypto::rand<size_t>()%up_index_limit;
// triangular distribution over [a,b) with a=0, mode c=b=up_index_limit
uint64_t r = crypto::rand<uint64_t>() % ((uint64_t)1 << 53);
double frac = std::sqrt((double)r / ((uint64_t)1 << 53));
size_t i = (size_t)(frac*up_index_limit);
// just in case rounding up to 1 occurs after sqrt
if (i == up_index_limit)
--i;
if(used.count(i))
continue;
bool added = add_out_to_get_random_outs(amount_outs, result_outs, amount, i);
Expand Down

0 comments on commit 4fb0996

Please sign in to comment.