转载请注明出处,联系我: [email protected]
本人热衷于数据库技术及算法的研究,志同道合之士, 欢迎探讨
1万次收敛的圆周率对比。
泰勒级数
沃利斯计算
BBP计算
蒙特卡洛计算
通过对此,被推崇的BBP计算,实质上收敛速度还不如沃利斯计算。
蒙特卡洛估值,带有很大的随意性,误差较大。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace PI_Test
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
//泰勒级数
private void button1_Click(object sender, EventArgs e)
{
double PITest=0;
for (double i = 1; i < double.Parse(收敛次数.Text); i++)
{
PITest=PITest+((1/(2*i-1))*Math.Pow(-1,i-1));
}
结果.Text = (PITest*4).ToString();
}
private void Form1_Load(object sender, EventArgs e)
{
AcceptButton = button1;
PI对比.Text = Math.PI.ToString();
}
//沃利斯
private void button2_Click(object sender, EventArgs e)
{
double PITest = 1;
for (double i = 1; i < double.Parse(收敛次数.Text); i++)
{
PITest = PITest * ((((2 * i) / (2 * i - 1)) *((2 * i) / (2 * i + 1))));
}
结果.Text = (PITest*2).ToString();
}
//BBP计算
private void button3_Click(object sender, EventArgs e)
{
double PItest=0;
for (double i = 0; i < double.Parse(收敛次数.Text); i++)
{
PItest = PItest + Math.Pow((-1 / 1024),i)
*(-32/(4*i+1)-
1/(4*i+3)+
256/(10*i+1)-
64/(10*i+3)-
4/(10*i+5)-
4/(10*i+7)+
1/(10*i+9));
}
结果.Text = (PItest/64).ToString();
}
//蒙特卡洛计算
private void button4_Click(object sender, EventArgs e)
{
double PItest = 0;
double inside_circle=0;
double i;
Random x = new Random();
int iSeed = x.Next(-10000000, 10000000);
Random y = new Random(iSeed);
for (i = 0; i < double.Parse(收敛次数.Text); i++)
{
double x1 = x.NextDouble();
double y1 = y.NextDouble();
if (x1 * x1 + y1 * y1 < 1)
{
inside_circle = inside_circle + 1;
}
}
PItest = 4*inside_circle / i;
结果.Text = PItest.ToString();
}
private void textBox1_TextChanged(object sender, EventArgs e)
{
}
}
}