另外一种算pi值的方法(更快的收敛)

另外一种算pi值的方法(更快的收敛)

还是采用newton计算pi的方法:

(x-1/2)^2+y^2=1/4

Go

x^x-x+1/4+y^2=1/4

GO

y=(sqrt x)(sqrt (1- x))

当x取0,1/2-(sqrt 3)/4) 时候,有如下关系成立:  (角度为30)

这样有A=1*/2*1/2*pi/12 - 1/2*1/4*(sqrt 3)/4) (R=1/2)

pi=24* { A+ 1/2*(1/2- 1/64)*(sqrt (- (* 1/2  1/2)  (* (1/2- 1/64)  (1/2- 1/64) ))}

 

A=2*{ 1/3* x^(3/2) - 0.5/5*1!*{(x) }^(5/2) +0.5*(0.5-1)/7*2!*{-(x/a) }^(7/2) +0.5*(0.5-1)*(0.5-

 

2)/9*3!*{-(x/a)^(9/2)} } ... }

 

expr 为积分后的表达式。

 

(defun pow (n count)

(if  (>  count  0)

       (*  n 

           (pow    n

                   (1- count)))

       1))

 

(defun slayer (n count)

(if  (>  count  0)

       (*  n 

           (slayer (1- n)

                   (1- count)))

       1))

 

(defun  expr  (n  x)

(if (eq n  1)

        (/  (pow  (sqrt x)

                  3)

            3)

        (+   (expr (1- n) x)            

             (/   

                  (* (pow  -1   (1- n))

                     (pow  (sqrt x  )

                           (+ (* 2 n)

                              1))

                     (slayer  0.5  

                           (1- n)))

                  (* (+ (* 2 n)

                        1)

                     (slayer (1- n)    

                             (1- n)))))))

 

//上面用了技巧,(1/4)^(n/2)=(1/2)^n

这里不能用上面的方法了,需要用sqrt来实现。

 

(defun  wrap (value)

(+  value

   (/  (sqrt  3)

       32)))

 

(* 48 

   (wrap (-  (* 2 (expr 5   (-  0.5  (/ (sqrt  3) 4) )))

             (* 2 (expr 5   0)))))

 

计算5项后能够精确到小数点后面第6位了。

(其实关于这个计算精度的问题不能完全这样看,首先计算机上有误差,另外关于计算多少项的问题,在试验的时

 

候就能发现次数高的,浮点数也会溢出,也就是说在单项中可能会做了更多的计算工作,并没有减少计算总量).

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值