type
Post
status
Published
date
Mar 23, 2020
slug
简单的利用正2的a次方边形求圆周率的方法
summary
简单的利用正2的a次方边形求圆周率的方法
tags
java
数学
category
编程
icon
password
Property
Nov 3, 2022 02:15 AM
notion image
每个正n边型都可以分成n个如图所示的三角形,每个三角形的角a都相等,假设斜边长都为1。 当n=4时,角a=90°;当n=8时,角a=45°;当n=16时,角a=22.5°…… 当n=2的a次方时,角a=360/n°。 又因为sin的半角公式:
可以算出每个角a的sin值,又三角形面积公式=absinc/2,可得三角形面积,n边形面积为n个三角形相加,,而n边形的面积又近似等于圆的面积,根据圆面积公式s=Πr²可得Π值。 下面的代码计算了2²²边形的面积计算出的Π值:
public class 求圆周率 { static double sin(int a){ double sin1=1; while (a>0){ sin1=1-(sin1*sin1); sin1=Math.sqrt(sin1); sin1=1-sin1; sin1=sin1/2; sin1=Math.sqrt(sin1); a--; } return (sin1); } public static void main(String[] args) { double a=20; //a的大小可变 double sin=sin((int)a); a=Math.pow(2,a+2); double sin1=Math.sin(2*Math.PI/a); System.out.println("sin真实值:"+sin1); System.out.println("sin计算值:"+sin); double s1=sin/2; double s2=a*s1; System.out.println((int)a+"边形计算出的圆周率为:"+s2); } }
当次数超过22时,因为浮点数精度的问题,sin值的计算结果出现偏差,Π的结果也会出现错误。
用二维数组记录学生成绩并排序暴力求解a的开方

  • Waline
  • Giscus