转载请注明出处,联系我: t39q@163.com 本人热衷于数据库技术及算法的研究,志同道合之士, 欢迎探讨
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) { } } }