Date: Tue, 28 Nov 2000 19:10:29 -0600 (CST) From: Mike Meyer <mwm@mired.org> To: "Brian F. Feldman" <green@FreeBSD.org> Cc: cvs-all@freebsd.org Subject: Re: cvs commit: src/usr.sbin/inetd builtins.c Message-ID: <14884.22405.22813.41567@guru.mired.org> In-Reply-To: <80189770@toto.iv>
next in thread | previous in thread | raw e-mail | index | archive | help
Brian F. Feldman <green@FreeBSD.org> types: > Warner Losh <imp@village.org> wrote: > > In message <20001126182240.A8051@fw.wintelcom.net> Alfred Perlstein writes: > > : - if ((to.tv_usec += tv.tv_usec) >= 1000000) { > > : + to.tv_usec += tv.tv_usec; > > : + if (to.tv_usec >= 1000000) { > > : to.tv_usec -= 1000000; > > : to.tv_sec++; > > : } > > > > Shouldn't this be > > if (to.tv_usec >= 1000000) { > > to.tv_sec += to.tv_usec / 1000000; > > to.tv_usec %= 1000000; > > } > > I asked Poul-Henning the same thing with regard to similar checks in the > kernel code. The reply was that, although this is the "most correct" way of > doing things, a properly done calculation of to.tv_usec + tv.tv_usec in > this (and many other) case(s) will result in a maximum of 1999998, so at > most one subtraction and increment will be necessary. > > If it's not possible to have a higher tv_usec, you save the REALLY expensive > divide-family instructions. Does it make sense to be paranoid about this, and do: while (to.tv_usec >= 1000000) { to.tv_usec -= 1000000; to.tv_sec++; } Which costs one extra compare in the normal case, but insures that the value is right if the assumption happens to fail (but will do so slowly)? <mike 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?14884.22405.22813.41567>