EXPORT Keta := 1000; EXPORT d := 8; EXPORT ARRYS := floor((Keta+(d-1))/d)+1; EXPORT DIGIT := 10^d; // mul+div L5(A)*f/(f*2+1) -> L5(A) mul_div_A_f(f) BEGIN LOCAL i, w, t; LOCAL cy := 0; LOCAL g := f*2+1; FOR i FROM 1 TO ARRYS DO t := L5(i)*f + cy*DIGIT; w :=floor(t/g); cy := t - w*g; L5(i) := w; END; END; // adjust L5(A) -> L5(A) adjust_A() BEGIN LOCAL i, w; LOCAL cy := 0; FOR i FROM ARRYS DOWNTO 1 DO w := L5(i)+cy; cy := floor(w/DIGIT); L5(i) := w-cy*DIGIT; END; END; EXPORT PI_CALC3() BEGIN LOCAL i, n, f, s, t; LOCAL str0,str1; // array initialize L5:=MAKELIST(0.0,X,1,ARRYS,1); // loop countre n := Keta/log(2); print(); print("PI "+d+"*"+ARRYS+"="+Keta+" DIGIT 計算中!"); s:=TICKS; FOR f FROM floor(n) DOWNTO 1 DO // A * f / (f*2+1) -> A mul_div_A_f(f); // A + 2 -> A L5(1) := L5(1)+2; TEXTOUT_P("COUNT="+f+" ", 0, 50,0,#0,100,#FFFFFF); t:=TICKS-s; TEXTOUT_P("time: "+t/1000+"秒",0,80,0,#0,100,#FFFFFF); END; // 補正 adjust_A(); t:=TICKS; print(); print("Calculation time: "+(t-s)/1000+"秒"); print("PI=3."); str1 := ""; FOR i FROM 2 TO ARRYS DO str0 := string(L5(i)); while dim(str0)1 DO str0 := str0+left(str1,10)+" "; str1 := mid(str1,11); END; print(str0); END;