📜  用Java实现 Borwein 算法

📅  最后修改于: 2022-05-13 01:54:20.297000             🧑  作者: Mango

用Java实现 Borwein 算法

Borwein 算法是 Jonathan 和 Peter Borwein 设计的一种计算,用于计算 1/π 的估计。他们构思了几种不同的算法。下面在Java中用四次汇编实现 Borwein 算法实际上确定了 Pi,但是,收敛速度过快。原则上,a 将四次盟友合并为 1/π。在每次强调时,正确数字的数量都以这种方式增加了四倍。

Java的数学库用于实现 Borwein 算法,它是Math pow()库的幂和根函数 Java.lang.Math .pow()用于计算一个数字的某个其他数字的幂。此函数接受两个参数并将第一个参数的值返回给第二个参数。

在一个实现中,Math 模块使用了两个内置函数,如下所示:

  1. 幂函数: pow()
  2. 平方根函数: sqrt()

1. pow()函数

语法

public static double pow(double a, double b) ;

参数

  • a:要返回幂根的基值。
  • b:要返回的指数值。

返回:此方法返回 a b

2. sqrt()函数

数学 sqrt() Java.lang.Math.sqrt() 返回作为参数传递给它的 double 类型值的平方根。

语法

public static double sqrt(double a) ;

参数:要返回其平方根的值。

返回:此方法返回传递给它的参数的正平方根值。

Java
// Java program to implement Borwein Algorithm
  
// Importing generic java classes
import java.io.*;
  
class GFG {
  
    // Main driver method
    public double Borwein(int noOfIter)
    {
        // Calculating initial value of 1/pi
        double oneByPi = 6.0 - 4 * Math.sqrt(2);
  
        // Calculating the constant value y
        // used in Borwein Algorithm
        double y = Math.sqrt(2) - 1.0;
  
        double oneByPiAfterIter;
        double yAfterIter;
  
        // It calculates an estimation
        // of 1/pi that increases in accurary
        // the more iterations you use
        for (int i = 0; i < noOfIter; i++) {
  
            // Based on Algorithm formulas are used
            yAfterIter= (1 - Math.pow((1 - y * y * y * y), (0.25))) /
                          (1+ Math.pow((1 - y * y * y * y), (0.25)));
                            
            oneByPiAfterIter = oneByPi * Math.pow((1 + yAfterIter), 4) - 
            Math.pow(2, 2 * i + 3) * yAfterIter * (1 + yAfterIter + 
                                           yAfterIter * yAfterIter);
                                             
            y = yAfterIter;
              
            oneByPi = oneByPiAfterIter;
        }
        return oneByPi;
    }
  
    // Main driver method
    public static void main(String[] args)
    {
        // Object of above class in main
        GFG ob = new GFG();
  
        // Number of Iteration
        int noOfIter = 10;
  
        // Printing value of 1/pi
        System.out.println("Value of 1/pi : "
                        + ob.Borwein(noOfIter));
    }
}


输出:

Value of 1/pi : 0.31830988618379075