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