You get the precision you choose...
PI on FPU= 3.141592653589793238
PI ^ 9 WinCalc= 29809.09933344621166
PI ^ 9 FPU= 29809.09933344621167
PI ^ 9 R8= 29809.09933344620003
PI ^ 9 R4= 29809.10742187500000Windows Calculator uses internally a very high precision, 30 digits or so.
include \masm32\MasmBasic\
MasmBasic.inc ;
download.data
res10 REAL10 29809.09933344621166650940240124
; Windows Calculatorpi4 REAL4 3.1415926535897932384626433832795
pi8 REAL8 3.1415926535897932384626433832795
res4 REAL4 ?
res8 REAL8 ?
Init expo=9 fldpi
Print Str$("PI on FPU=\t%Jf\n", ST(0))
Print Str$("PI ^ 9 WinCalc=\t%Jf\n", res10)
fldpi
REPEAT
expo-1 fmul st, st(1)
; FPU, Real10 precision ENDM
Print Str$("PI ^ 9 FPU=\t%Jf\n", ST(0))
movsd xmm0, pi8
REPEAT
expo-1 mulsd xmm0, pi8
; xmm, Real8 precision ENDM
movsd res8, xmm0
Print Str$("PI ^ 9 R8=\t%Jf\n", res8)
movss xmm0, pi4
REPEAT
expo-1 mulss xmm0, pi4
; xmm, Real4 precision ENDM
movss res4, xmm0
Inkey Str$("PI ^ 9 R4=\t%Jf\n", res4)
Exitend start