5.15求π近似值

”正多边形逼近“法求π:核心思想是极限的思想。假设一个直径d为1的圆,只要求出该圆的周长C,就可以通过π=C/d方法求出π的值。所以关键是求出该圆的周长C。

”正多边形逼近“也叫做”割圆术“,当一个圆的内接正多边形边数越多时,其边长就越接近外接的圆周长。

设一个直径为1的圆的内接多边形边长为b,边数为i,周长为C=bi;当多边形的边数加倍后,新多边形边长为x=sqrt(2-2sqrt(1-b*b))/2,新多边形周长为:C=2ix。

#include <iostream>
#include<cmath>
using namespace std;

double getPI(int n) {//n指的是要迭代的次数(迭代次数越多越精确)
	int div,i=4;//div记录迭代次数
	double b=sqrt(2)/2.0;  //直径为1的圆,内接正四边形的初始化,其边长为sqrt(2)/2,边数为4,即i
	double c=0.0;
	for(div=0;div<n;div++) {
		b=sqrt(2.0-2.0*sqrt(1.0-b*b))*0.5;//边数加倍后的边长
		i=i*2;                //边数加倍
	}
	c=b*i;    //计算多边形周长
	return c;
}

int main() {
	int n;
	double PI;
	cin>>n;
	PI=getPI(n);
	cout<<PI;
	return 0;
}

  

时间: 2024-09-29 22:50:16

5.15求π近似值的相关文章

15.求函数:sin(x)=x/1! - x3/3! + x5/5! -x7/7! +…,最后一项精度不低于0.000001

#include <iostream> using namespace std: int main() {     double x,sinx=0.0,jbf,j=1.0;     cin>>x;     jbf=x;     int k=1,l=1;     double n=1;     while(j>=1e-6)     {         j=jbf/n;         sinx=sinx+k*j;         jbf=jbf*x*x;         k=-

C语言用公式求π近似值

终止条件: 某一项: 1 / n+2 < 10 ^ -6; 1e-6即0.000001, 代码如下: 1 #include<stdio.h> 2 #include <math.h> 3 4 int main() { 5 double quarter = 0; 6 double PI = 0; 7 int sign = -1; 8 double term = 1.0; 9 for ( ; 1.0 / term > 1e-6; ) { 10 // pow(10, -6) =

15:取近似值ApproximateValue

题目描述 写出一个程序,接受一个正浮点数值,输出该数值的近似整数值.如果小数点后数值大于等于5,向上取整:小于5,则向下取整. 输入描述:输入一个正浮点数值 输出描述:输出该数值的近似整数值 输入例子:5.5 输出例子:6 package prctice01; /*题目描述 写出一个程序,接受一个正浮点数值,输出该数值的近似整数值.如果小数点后数值大于等于5,向上取整:小于5,则向下取整. 输入描述:输入一个正浮点数值 输出描述:输出该数值的近似整数值 输入例子:5.5 输出例子:6*/ imp

BZOJ 3000(Big Number-Stirling公式求n!近似值)

3000: Big Number Time Limit: 2 Sec  Memory Limit: 128 MB Submit: 220  Solved: 62 [Submit][Status] Description 给你两个整数N和K,要求你输出N!的K进制的位数. Input 有多组输入数据,每组输入数据各一行,每行两个数--N,K Output 每行一个数为输出结果. Sample Input 2 5 2 10 10 10 100 200 Sample Output 1 1 7 69 对

31、求最大公约数和最大公倍数

求最大公约数和最大公倍数 一.求三个数的最大公约数和最大公倍数 /* 时间:2017年6月30日20:14:33 功能:求三个数的最大公约数与最小公倍数 */ # include <stdio.h> main() { int x, y, z, a, b, min, max; printf("请输入三个整数以空格分隔:"); scanf("%d %d %d", &x,&y,&z); if(x<y) { min = x; max

MATLAB入门学习(四)

今天我们开始学编程啦~ 点击左上角的这个进入编程界面 这是新建新的.m文件,也就是matlab命令文件, 一般命令文件不带输入和输出的参数,只是一些命令的组合,带有输入输出参数的文件是函数文件~ 下面我们来编写一个hello world 程序~ 输入disp('Hello World!'); 然后点击运行    你看~ 是不是很无聊...那就来个好一点的~ 输入:t=pi*(0:0.001:1);x=sin(t).*sin(10*t);comet(t,x) 然后运行,,自己研究玩去吧~ m文件就

浅谈优化程序性能(上)

前言 我们知道,多项式定义为: 在几何学中,多项式是最简单的平滑曲线.简单是指它仅由乘法及加法构成,平滑是因为它类同口语中的平滑,以数学术语来说,它是无限可微,即它的所有高次微分都存在.事实上,多项式的微分也是多项式.简单及平滑的特点,使多项式在数值分析.图论,以及电脑绘图等,都发挥极大的作用.多项式求值是解决许多问题的核心技术.以数值分析为例,多项式函数常常用作对数学库中的三角函数求近似值. 现在,让我们来用 C 语言写一个对多项式求值的函数吧. 直接的算法 直接按照多项式的定义使用循环求值:

2017年江西理工大学C语言程序设计竞赛(高级组)

问题 A: 求近似值 1 #include <stdio.h> 2 #include <time.h> 3 #include <stdlib.h> 4 using namespace std; 5 6 #define ll long long 7 const ll M = 9e18; 8 const ll MOD = 9932017; 9 struct Node { 10 ll m[2][2]; 11 }; 12 13 ll a[4966010]; 14 15 Node

bzoj3000 Big Number 数论,斯特林公式

Description 给你两个整数N和K,要求你输出N!的K进制的位数. Input 有多组输入数据,每组输入数据各一行,每行两个数——N,K Output 每行一个数为输出结果 Sample Input 2 52 1010 10100 200 Sample Output 11769对于100%的数据,有2≤N≤2^31, 2≤K≤200,数据组数T≤200. 题解 用Stirling公式求近似值 位数=logk(n!)+1 ≍ logk(sqrt(2πn)*(n/e)^n)+1 = logk