diff --git a/ipc/chromium/src/base/histogram.cc b/ipc/chromium/src/base/histogram.cc index 90da947926fd..3123f0f8fb25 100644 --- a/ipc/chromium/src/base/histogram.cc +++ b/ipc/chromium/src/base/histogram.cc @@ -746,7 +746,7 @@ void Histogram::SampleSet::AccumulateWithExponentialStats(Sample value, size_t index) { Accumulate(value, count, index); DCHECK_GE(value, 0); - double value_log = log(static_cast(value) + 1); + float value_log = logf(static_cast(value) + 1.0f); log_sum_ += count * value_log; log_sum_squares_ += count * value_log * value_log; } diff --git a/toolkit/components/telemetry/tests/unit/test_nsITelemetry.js b/toolkit/components/telemetry/tests/unit/test_nsITelemetry.js index 6a66fe39753f..928096ac2193 100644 --- a/toolkit/components/telemetry/tests/unit/test_nsITelemetry.js +++ b/toolkit/components/telemetry/tests/unit/test_nsITelemetry.js @@ -30,8 +30,11 @@ function test_histogram(histogram_type, name, min, max, bucket_count) { // verify properties do_check_eq(sum, s.sum); if (histogram_type == Telemetry.HISTOGRAM_EXPONENTIAL) { - do_check_eq(log_sum, s.log_sum); - do_check_eq(log_sum_squares, s.log_sum_squares); + // We do the log with float precision in C++ and double precision in + // JS, so there's bound to be tiny discrepancies. Just check the + // integer part. + do_check_eq(Math.floor(log_sum), Math.floor(s.log_sum)); + do_check_eq(Math.floor(log_sum_squares), Math.floor(s.log_sum_squares)); do_check_false("sum_squares_lo" in s); do_check_false("sum_squares_hi" in s); } else {