Bugfix: NNs not found due to precision error.

pull/119/head
Sancho McCann 11 years ago
parent 49102c7e7a
commit f83cffe74a
  1. 6
      modules/text/src/erfilter.cpp

@ -1766,7 +1766,9 @@ static void NN_chain_core(const int_fast32_t N, double * const D, t_members * co
for (i=active_nodes.start; i<idx2; i=active_nodes.succ[i]) for (i=active_nodes.start; i<idx2; i=active_nodes.succ[i])
{ {
if (D_(i,idx2) < min) // Need double_equal check because of some numerical imprecision
// in construction of D_.
if (D_(i,idx2) < min && !double_equal(D_(i,idx2), min))
{ {
min = D_(i,idx2); min = D_(i,idx2);
idx1 = i; idx1 = i;
@ -1774,7 +1776,7 @@ static void NN_chain_core(const int_fast32_t N, double * const D, t_members * co
} }
for (i=active_nodes.succ[idx2]; i<N; i=active_nodes.succ[i]) for (i=active_nodes.succ[idx2]; i<N; i=active_nodes.succ[i])
{ {
if (D_(idx2,i) < min) if (D_(idx2,i) < min && !double_equal(D_(i,idx2), min))
{ {
min = D_(idx2,i); min = D_(idx2,i);
idx1 = i; idx1 = i;

Loading…
Cancel
Save