Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 31 Jan 2005 20:02:48 -0800 (PST)
From:      Don Lewis <truckman@FreeBSD.org>
To:        cal@rushg.aero.org
Cc:        freebsd-hackers@FreeBSD.org
Subject:   Re: bug in calcru()
Message-ID:  <200502010402.j1142mBt081759@gw.catspoiler.org>
In-Reply-To: <200501262105.j0QL5x9W042384@calamari.aero.org>

next in thread | previous in thread | raw e-mail | index | archive | help
On 26 Jan, Chris Landauer wrote:
> 
> hihi, doug -
> 
>> Doug Ambrisko <ambrisko@ambrisko.com> wrote
>>	...
>>	The assumption with this calculation is that st & it tend to be
>>	small compared to tt so the 1024 X shouldn't overflow much.
>>	...
>> cal@aero.org wrote:
>> |	...but i'm a little worried that the 1024 multiplications aren't
>> |	large enough when tt gets really large
>> | > Doug Ambrisko <ambrisko@ambrisko.com> wrote
>> | >     ...
>> | >     /* Subdivide tu. try to becareful of overflow */
>> | >     su = tu * (st * 1024 / tt) / 1024;
>> | >     iu = tu * (it * 1024 / tt) / 1024;
>> | >     uu = tu - (su + iu);
>> | >     ...
> 
> i'm not so worried about the overflow limit (that's what the mathematical
> analysis is intended to discover, and i assume that the bound is large enough
> to ignore the issue - that is the really clever part about computing su and iu
> first instead of uu), but the underflow - if st and it are small enough and tt
> is large enough, these equations produce 0 for both su and iu (and the
> reported percentage will rightly be 0.00%, but i want to see the rest of the
> detail for my time models)

It looks like the worst case for overflow would be if st == tt or it ==
tt, and even then overflow would not happen until the run time got up
above 500 years according to my calculations, so it would probably be
safe to increase the 1024 factor by quite a bit.  Even at 1024, the
system and interrupt time will be calculated to about 0.1%, though you
might want to tweak the formula a bit to do rounding.
	su = tu * ((st * 1024 + 512) / tt) / 1024;



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200502010402.j1142mBt081759>