mirror of
https://github.com/freebsd/freebsd-src
synced 2024-07-21 18:27:22 +00:00
ping: Avoid reporting NaNs
Avoid calculating the square root of negative zero, which can easily happen on certain architectures when calculating the population standard deviation with a sample size of one, e.g., 0.01 - (0.1 * 0.1) = -0.000000. Avoid returning a NaN by capping the minimum possible variance value to zero (positive). In the future, maybe skip reporting statistics at all for a single sample. Reported by: Jenkins Reviewed by: asomers MFC after: 1 week Pull Request: https://github.com/freebsd/freebsd-src/pull/863 Differential Revision: https://reviews.freebsd.org/D42114
This commit is contained in:
parent
04b465777a
commit
4d348e83b7
|
@ -1522,10 +1522,10 @@ finish(void)
|
|||
if (nreceived && timing) {
|
||||
double n = nreceived + nrepeats;
|
||||
double avg = tsum / n;
|
||||
double vari = tsumsq / n - avg * avg;
|
||||
double stddev = sqrt(fmax(0, tsumsq / n - avg * avg));
|
||||
(void)printf(
|
||||
"round-trip min/avg/max/stddev = %.3f/%.3f/%.3f/%.3f ms\n",
|
||||
tmin, avg, tmax, sqrt(vari));
|
||||
tmin, avg, tmax, stddev);
|
||||
}
|
||||
|
||||
if (nreceived)
|
||||
|
|
|
@ -2349,10 +2349,10 @@ summary(void)
|
|||
/* Only display average to microseconds */
|
||||
double num = nreceived + nrepeats;
|
||||
double avg = tsum / num;
|
||||
double dev = sqrt(tsumsq / num - avg * avg);
|
||||
double stddev = sqrt(fmax(0, tsumsq / num - avg * avg));
|
||||
(void)printf(
|
||||
"round-trip min/avg/max/std-dev = %.3f/%.3f/%.3f/%.3f ms\n",
|
||||
tmin, avg, tmax, dev);
|
||||
tmin, avg, tmax, stddev);
|
||||
(void)fflush(stdout);
|
||||
}
|
||||
(void)fflush(stdout);
|
||||
|
|
Loading…
Reference in a new issue