I don't quite understand what you mean
The fdiv does the job under the hood, as you rightly show, but it
cannot provide the extra two digits of precision:
248.0925008213777242 MasmBasic (with REAL10 variables)
248.092500821377724237 Gcc
248.092500821377724236 Windows Calc (REAL16??)
REAL10 precision stops at the ...242. It seems that some fanboy at
cplusplus has fumbled the example so that it "looks precise". As soon as you modify the figures, e.g. 90613.305
8 instead of 90613.305, the picture changes:
248.09250301171832220337 Gcc
248.0925030117183222 MasmBasic
248.0925030117183221991 Windows Calc
This is the max precision you can get with
fdiv, using the fpu's full REAL10 precision. OllyDbg displays, directly after the fdiv, 248.0925030117183222
0. The CRT printf() is less shy and displays as many digits as you want, but everything after the 222 is fake.
Btw your disassembly shows what I suspected:
fld st0, qword ptr [ebp+08h] - meaning that Pelles C's long double is a short double. Gcc uses
fld tbyte ptr [esp+10].