|
Message-ID: <20140407180426.GD26358@brightrain.aerifal.cx> Date: Mon, 7 Apr 2014 14:04:26 -0400 From: Rich Felker <dalias@...ifal.cx> To: musl@...ts.openwall.com Subject: Re: printf issues On Mon, Apr 07, 2014 at 05:36:11PM +0200, Szabolcs Nagy wrote: > * Morten Welinder <mwelinder@...il.com> [2014-04-07 10:13:26 -0400]: > > The frequency of this problem is something like 1 in 5e6. > > Observations: > > > > * I only seem to be able to trigger it for %g even though all my > > samples print in "e" form. > > > > * The numbers are all roughly the same size: 1e15 > > > > * The numbers are all integers ending in 05. (Except two cases > > where the 05 is followed by zeros.) > > > > * The precision is always just below the value that would have > > make an exact representation. > > printf("%.12g\n", 1000000000005.0); > printf("%.11g\n", 500000000045.0); > printf("%.11g\n", 275000000025.0); > > prints > > 1.00000000001e+12 > 5.0000000005e+11 > 2.7500000003e+11 > > in fmt_fp > if (x || d+1!=z) { > long double round = CONCAT(0x1p,LDBL_MANT_DIG); > long double small; > if (*d/i & 1) round += 2; > if (x<i/2) small=0x0.8p0; > else if (x==i/2 && d+1==z) small=0x1.0p0; > else small=0x1.8p0; > ... > > here > i == 10 > x == *d%i == 5 == i/2 > but the half-way case does not trigger because z-d == 2 instead of 1 > and z[-1] == 0 which should not happen here Thanks for making the analysis needed to fix this. I've committed the fix. Hopefully this is the last of such bugs. Perhaps we should devise a stress test with random inputs and assertions to search for other bugs. Some ideas that come to mind: 1. Printing both full-precision and roundings to 0...25 places and asserting that the roundings are correct based on the full-prec. 2. For full precision outputs, asserting that sum(digits)%3 == numerator%3 for diadic rationals of the form numerator/denominator. 3. Round tripping with strtold. 4. Assertions about formatting such as lack of trailing zeros. ...? Rich
Powered by blists - more mailing lists
Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.