function estimate_num_spikes(spike, range)
{
   if (spike < range / 2)
      spike = range - spike;
   var best_error = 1.0;
   var e0 = 0, e1 = 0, e2 = 0;
   var actual = spike / range;
   var candidates = []
   for (var denom = 1.0; denom < spike; ++denom)
   {
       var numerator = Math.round(denom * actual);
       var estimated = numerator / denom;
       var error = Math.abs(estimated - actual);
       e0 = e1;
       e1 = e2;
       e2 = error;
       // Szukaj lokalnego minimum, które bije nasz
       // aktualnie najlepszy błąd
       if (e1 <= best_error && e1 < e0 && e1 < e2)
       {
          var repeat_period = denom - 1;
          candidates.push(denom - 1);
          best_error = e1;
       }
   }
   return candidates;
}
