--- a/ping_common.c 2014-11-11 00:02:07.000000000 +0000 +++ b/ping_common.c 2014-11-11 09:04:06.699021939 +0000 @@ -1016,14 +1016,17 @@ } putchar('\n'); if (nreceived && timing) { long tmdev; + long count = nreceived + nrepeats; - tsum /= nreceived + nrepeats; - tsum2 /= nreceived + nrepeats; - tmdev = llsqrt(tsum2 - tsum * tsum); + // mdev = sqrt((tsum2/count) - (tsum/count)*(tsum2/count)) + // However, we must be careful about rounding! + tmdev = llsqrt((tsum2 * count - tsum * tsum) / (count * count)); + tsum2 /= count; + tsum /= count; printf("rtt min/avg/max/mdev = %ld.%03ld/%lu.%03ld/%ld.%03ld/%ld.%03ld ms", (long)tmin/1000, (long)tmin%1000, (unsigned long)(tsum/1000), (long)(tsum%1000), (long)tmax/1000, (long)tmax%1000,