Subject: Re: CVS commit: src
To: None <jwise@netbsd.org, source-changes@netbsd.org>
From: Brian C. Grayson <bgrayson@orac.ece.utexas.edu>
List: source-changes
Date: 02/24/1999 20:58:56
On Wed, Feb 24, 1999 at 11:31:38AM -0800, Jim Wise wrote:
> Module Name: src
> Committed By: jwise
> Date: Wed Feb 24 19:31:38 UTC 1999
>
> Modified Files:
> src/sbin/ping: Makefile ping.c
> Log Message:
> Add code from Daniel Hagerty <hag@ai.mit.edu> to print standard deviation
> when printing out final statistics line.
>
> Closes PR bin/6198
There are a few problems with the code in the PR. I thought I
had CC'd netbsd-bugs on my note to Daniel back in September,
but apparently not, and he never replied.
Problem 1: The equation for the variance is wrong. It ought to be:
double variance = ((tsumsq/n) - avg*avg) * (n/(n-1));
Try it out with two samples of 1e-3 and 1e-3, and the variance
ought to be 0, and not 1e-6 as the current code produces.
Problem 2: Scaling is wrong. In the printf, we print
sqrt(variance*1000), but that should be sqrt(variance)*1000.
I've verified the correctness of this by using the octave
stddev builtin (std) to calculate the stddev of the sample
times. Here's a diff, if you want to commit, or I can if there
are no objections (and Luke/Matthew agree).
RCS file: /ccd0/cvsroot/src/sbin/ping/ping.c,v
retrieving revision 1.44
diff -1 -u -t -p -r1.44 ping.c
--- ping.c 1999/02/24 19:31:38 1.44
+++ ping.c 1999/02/25 02:52:22
@@ -1113,3 +1113,3 @@ summary(int header)
double avg = (tsum / n);
- double variance = (tsumsq / (n - (avg * avg)));
+ double variance = ((tsumsq/n) - avg*avg) * (n/(n-1));
@@ -1118,3 +1118,3 @@ summary(int header)
tmin * 1000.0, avg * 1000.0,
- tmax * 1000.0, sqrt(variance * 1000.0));
+ tmax * 1000.0, sqrt(variance) * 1000.0);
if (pingflags & F_FLOOD) {