EXPORT PI_CALC5() BEGIN LOCAL digits := 1000; // 計算する桁数 LOCAL d := 6 ; // 変数あたりの桁数 LOCAL base := 10^d ; // 基底 LOCAL ARRYS := floor((digits+(d-1))/d)+1; // 配列数 LOCAL e := floor(d/log(2)) ; // 1ループあたり省略する計算項数 LOCAL f := floor(digits/log(2))+1 ; // 計算項数 LOCAL ac := floor(f/e)*(2*f-1) ; // 配列アクセス回数 LOCAL temp,denom; LOCAL n, i, j, g, w, c, s, t; LOCAL str0, str1; s:=TICKS; // array initialize L6:=MAKELIST(0.0,X,1,f,1); L7:=MAKELIST(0.0,X,1,ARRYS,1); print(); print("PI "+d+"桁*"+ARRYS+"="+digits+"桁 "); print("計算数 "+e); print("計算項数 "+f); print("配列アクセス回数 "+ac); s:=TICKS; FOR i FROM 0 TO f DO L6(i) := floor(base / 5) ; END; c := 0 ; i := 1 ; FOR n FROM f DOWNTO 1 STEP e DO temp := 0 ; FOR j FROM n-1 DOWNTO 1 DO denom := 2 * j - 1 ; w := temp * j + L6(j) * base ; temp := floor(w / denom) ; L6(j) := w - temp * denom ; END; w := floor( temp / base) ; L7(i) := c + w ; c := temp - w * base ; i := i + 1 ; TEXTOUT_P("残り計算項数="+n+" ", 0, 100,0,#0,160,#FFFFFF); t:=TICKS-s; TEXTOUT_P("経過時間: "+t/1000+"秒",0,130,0,#0,160,#FFFFFF); END; t:=TICKS; print("計算時間: "+(t-s)/1000+"秒"); print("PI=3."); str1 := mid(string(L7(1)),2,10); FOR i FROM 2 TO ARRYS DO str0 := string(L7(i)); while dim(str0)1 DO str0 := str0+left(str1,10)+" "; str1 := mid(str1,11); END; print(str0); END;