Today I discovered .. that the scanf family of functions was introducing float (32-bit floating-point) noise into double (64-bit floating-point) results.
I see it here, too:
$ sudo apt-get install mingw32 $ i586-mingw32msvc-gcc test_fscanf.c $ echo "1.1e+01 1.1e+00 1.1e-01 1.1e-02 1.1e-03 1.1e-04" | ~/wine-git/wine a.exe 1.10000000000000000e+001 1.10000000000000009e+000 1.10000001639127737e-001 1.10000003278255491e-002 1.10000004917383261e-003 1.10000006556511075e-004
You can work around it with 'winetricks vcrun6', after which the test program outputs: 1.10000000000000000e+001 1.10000000000000010e+000 1.10000000000000000e-001 1.09999999999999990e-002 1.10000000000000010e-003 1.10000000000000000e-004
So the problem is in wine's msvcrt.dll.
You could narrow it down further by printing out the raw byte strings for the numbers and then sprinking that printout through the path from when scanf is called to where printf returns. (Or, I suppose, step through it with a debugger instead.)
But the best place to report the bug is http://bugs.winehq.org - Dan