clear
// 格雷果里-莱布尼茨级数
// 收敛速度很慢
pi  = call calc_pi( 0630 )

end

calc_pi:
    
prompt off
    
local iter

    
iter    = getpara

    
local number
    
local sig       // 0 - sub, 1 - add
    
local kkk       // 3, 5, 7, 9 ...
    
local prod      // 3 * 5 * 7 * 9 ...
    
local tmp
    
local result

    
number  = 04
    
sig     = 00
    
kkk     = 01    // x = x + 2, the x = 3, 5, 7, 9
    
prod    = 01

    
times   = 00

again:

    
kkk     = big_add( $kkk, 02 )
    
prod    = big_mul( $prod, $kkk )

    
tmp     = big_div( $prod, $kkk )
    
tmp     = big_mul( $tmp, 04 )
    
number  = big_mul( $number, $kkk )

    
if $sig == 00
        
number  = big_sub( $number, $tmp )
        
sig     = 01
//      ? " - 4 / " int( 0x$kkk )
    
else
        
number  = big_add( $number, $tmp )
        
sig     = 00
//      ? " + 4 / " int( 0x$kkk )
    
endif


    
times   = big_add( $times, 01 )

    
if $times < $iter
        
goto again
    
endif

    
// 前面生成的是pi * prod,下面要还原
    
// 又因为只支持整数除法,所以乘以多个10,用于将小数转成整数
    
do 15
        
number  = big_mul( $number, 0a )
    
loop

    
result  = big_div( $number, $prod )
    
result  = hex2int( $result )        // 转成10进制数进行显示
    
prompt on
return $result