use nexttoward instead of epsilon since epsilon is too small sometimes

parent b99f8bb7
Pipeline #14132 failed with stages
in 3 minutes and 7 seconds
 ... @@ -126,7 +126,7 @@ double bob::measure::farThreshold(const blitz::Array &negatives, ... @@ -126,7 +126,7 @@ double bob::measure::farThreshold(const blitz::Array &negatives, double epsilon = std::numeric_limits::epsilon(); double epsilon = std::numeric_limits::epsilon(); // handle special case of far == 1 without any iterating // handle special case of far == 1 without any iterating if (far_value >= 1 - epsilon) if (far_value >= 1 - epsilon) return scores(0) - epsilon; return std::nexttoward(scores(0), scores(0)-1); // Reverse negatives so the end is the start. This way the code below will be // Reverse negatives so the end is the start. This way the code below will be // very similar to the implementation in the frrThreshold function. The // very similar to the implementation in the frrThreshold function. The ... @@ -139,7 +139,7 @@ double bob::measure::farThreshold(const blitz::Array &negatives, ... @@ -139,7 +139,7 @@ double bob::measure::farThreshold(const blitz::Array &negatives, // since the comparison is `if score >= threshold then accept as genuine`, we // since the comparison is `if score >= threshold then accept as genuine`, we // can choose the largest score value + eps as the threshold so that we can // can choose the largest score value + eps as the threshold so that we can // get for 0% FAR. // get for 0% FAR. double valid_threshold = scores(current_position) + epsilon; double valid_threshold = std::nexttoward(scores(current_position), scores(current_position)+1); double current_threshold; double current_threshold; double future_far; double future_far; while (current_position < total_count) { while (current_position < total_count) { ... @@ -181,7 +181,7 @@ double bob::measure::frrThreshold(const blitz::Array &negatives, ... @@ -181,7 +181,7 @@ double bob::measure::frrThreshold(const blitz::Array &negatives, double epsilon = std::numeric_limits::epsilon(); double epsilon = std::numeric_limits::epsilon(); // handle special case of frr == 1 without any iterating // handle special case of frr == 1 without any iterating if (frr_value >= 1 - epsilon) if (frr_value >= 1 - epsilon) return scores(scores.extent(0)-1) + epsilon; return std::nexttoward(scores(scores.extent(0)-1), scores(scores.extent(0)-1)+1); // Move towards the end of array changing the threshold until we pass the // Move towards the end of array changing the threshold until we pass the // desired FRR value. Starting with a threshold that corresponds to FRR == 0. // desired FRR value. Starting with a threshold that corresponds to FRR == 0. ... ...
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!