81 lines
1.2 KiB
Text
81 lines
1.2 KiB
Text
INCLUDE "H6:REALMATH.ACT"
|
|
|
|
DEFINE PTR="CARD"
|
|
DEFINE REAL_SIZE="6"
|
|
BYTE ARRAY realArray(1536)
|
|
|
|
PTR FUNC RealArrayPointer(BYTE i)
|
|
PTR p
|
|
|
|
p=realArray+i*REAL_SIZE
|
|
RETURN (p)
|
|
|
|
PROC InitRealArray()
|
|
REAL r2,r255,ri,div
|
|
REAL POINTER pow
|
|
INT i
|
|
|
|
IntToReal(2,r2)
|
|
IntToReal(255,r255)
|
|
|
|
FOR i=0 TO 255
|
|
DO
|
|
IntToReal(i,ri)
|
|
RealDiv(ri,r255,div)
|
|
pow=RealArrayPointer(i)
|
|
Power(div,r2,pow)
|
|
OD
|
|
RETURN
|
|
|
|
PROC CalcPi(INT n REAL POINTER pi)
|
|
BYTE x,y
|
|
INT i,counter
|
|
REAL tmp1,tmp2,tmp3,r1,r4
|
|
REAL POINTER pow
|
|
|
|
counter=0
|
|
IntToReal(1,r1)
|
|
IntToReal(4,r4)
|
|
|
|
FOR i=1 TO n
|
|
DO
|
|
x=Rand(0)
|
|
pow=RealArrayPointer(x)
|
|
RealAssign(pow,tmp1)
|
|
|
|
y=Rand(0)
|
|
pow=RealArrayPointer(y)
|
|
RealAssign(pow,tmp2)
|
|
|
|
RealAdd(tmp1,tmp2,tmp3)
|
|
|
|
IF RealGreaterOrEqual(tmp3,r1)=0 THEN
|
|
counter==+1
|
|
FI
|
|
OD
|
|
|
|
IntToReal(counter,tmp1)
|
|
RealMult(r4,tmp1,tmp2)
|
|
IntToReal(n,tmp3)
|
|
RealDiv(tmp2,tmp3,pi)
|
|
RETURN
|
|
|
|
PROC Test(INT n)
|
|
REAL pi
|
|
|
|
PrintF("%I samples -> ",n)
|
|
CalcPi(n,pi)
|
|
PrintRE(pi)
|
|
RETURN
|
|
|
|
PROC Main()
|
|
Put(125) PutE() ;clear the screen
|
|
|
|
PrintE("Initialization of data...")
|
|
InitRealArray()
|
|
|
|
Test(10)
|
|
Test(100)
|
|
Test(1000)
|
|
Test(10000)
|
|
RETURN
|