Message258689
The dtoa.c occurrence is also straightforward to fix. It's coming from this declaration:
static const double tinytens[] = { 1e-16, 1e-32, 1e-64, 1e-128,
9007199254740992.*9007199254740992.e-256};
We need to be a tiny bit careful here, since dtoa.c is fragile code and relies on exact representation of some floats. But this isn't one of them: the only thing that tinytens is used for is getting a first approximation to the correct strtod conversion before the main iteration kicks in.
So replacing that last tinytens value with a suitably precise constant should be okay. The *exact* value of the constant we need is 0x1.8062864ac6f43p-745, or in decimal:
8.11296384146066798564414657510725945755617084762542409283393077939218873123696010224953185884350111344494845510586594487062499326481633636403965073720792027659736980514301906428513324403012698167973428740345918815412673646248939187125560378562250718330485204443480974365425682653185460026731686712157238961539250106472701178830382576220700577401565213825995547382545061286464557591871221948351734365233811730381171156150018612038234137396963100802781483162471536048255738998621259419238986828005847002315384502722411971989039148624688058131226853220141492784023284912109375E-225
But 8.112963841460668e-225 should be good enough (along with a comment explaining why the expression was changed). If MSVC supported C99's hex constants, we could just use 0x1.8062864ac6f43p-745. But it doesn't. :-( |
|
Date |
User |
Action |
Args |
2016-01-20 16:07:03 | mark.dickinson | set | recipients:
+ mark.dickinson, tim.peters, paul.moore, pitrou, vstinner, tim.golden, r.david.murray, skrah, python-dev, zach.ware, serhiy.storchaka, steve.dower |
2016-01-20 16:07:03 | mark.dickinson | set | messageid: <1453306023.62.0.0109319201868.issue25934@psf.upfronthosting.co.za> |
2016-01-20 16:07:03 | mark.dickinson | link | issue25934 messages |
2016-01-20 16:07:03 | mark.dickinson | create | |
|