I've tracked my rounding problem down to this line in vxprintf():
while( realvalue>=10.0 && exp<=350 ){ realvalue *= .1; exp++; }
Apparently, on some hardware, sometimes, multiplying a number like '358' by .1 results in a number like '35.799999' or thereabouts. Now what's really strange is that it doesn't happen every time. If I call vxprintf by hand with '358', I get '3.5800000' the first time round that loop. But there is a code path down which I go that causes that value to become strange the first time round the loop. On other hardware the problem never happens, no matter what code path gets to that line.
This is with SQLite 2.8.15 built with VC 6. If we go back to our old version of 2.8.6, then we don't have this kind of problem.
I don't suppose anybody has ever run into something like this before?