Date: Mon, 29 Oct 2001 06:51:29 -0800 From: Luigi Rizzo <rizzo@aciri.org> To: Dag-Erling Smorgrav <des@ofug.org> Cc: "Andrew R. Reiter" <arr@watson.org>, Josef Karthauser <joe@FreeBSD.org>, cvs-committers@FreeBSD.org, cvs-all@FreeBSD.org Subject: Re: ipfw.c -- (was: cvs commit: src/sys/netinet ip_fw.h) Message-ID: <20011029065129.B96115@iguana.aciri.org> In-Reply-To: <xzp4roiqzrd.fsf@flood.ping.uio.no> References: <Pine.NEB.3.96L.1011029010151.33440A-100000@fledge.watson.org> <xzp4roiqzrd.fsf@flood.ping.uio.no>
next in thread | previous in thread | raw e-mail | index | archive | help
On Mon, Oct 29, 2001 at 03:36:38PM +0100, Dag-Erling Smorgrav wrote:
> "Andrew R. Reiter" <arr@watson.org> writes:
> > if (chain->fw_flg & IP_FW_F_RND_MATCH) {
> > double d = 1.0 * chain->dont_match_prob;
> > d = 1 - (d / 0x7fffffff);
> > printf("prob %f ", d);
> > }
>
> There is no need for a temporary variable here. The probability
> computation can be greatly simplified. BTW, the format string should
Sure there is no need for a temp variable, and sure the code could
be written in a better way, using macros for scale factors etc.
But the code you suggest is _wrong_:
chain->dont_match_prob is an int, and the compiler does an integer
division (which is not what you want) unless you properly instruct
it to do a floating point calculation (with a cast, a multiplication
for 1.0, or whatever you like).
By the time you put in the cast, the line becomes so long that it
probably becomes worthwhile (for readability purposes) to do the
calculation outside the printf, etc. etc.
Next time, how about thinking a couple of seconds before lecturing people :)
cheers
luigi
> specify the number of decimals (e.g. "%.3f").
>
> if (chain->fw_flg & IP_FW_F_RND_MATCH)
> printf("prob %.3f ",
> 1.0 - chain->dont_match_prob / 0x7fffffff);
>
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe cvs-all" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20011029065129.B96115>
