由求平方根的程序看实数的运算

您所在的位置:网站首页 三根号三的平方怎么算 由求平方根的程序看实数的运算

由求平方根的程序看实数的运算

2023-07-12 00:21| 来源: 网络整理| 查看: 265

在用迭代法求平方根时发现一个问题: double x,a=6553500000; x=a/2.0; while(fabs(x*x-a)>=1.0e-6) ) x=(x+a/x)/2.0; printf("sqrt(%f)=%lf\n",a,x);

运行结果正常,但当a=655350000000时,却出现了死循环,一时找不出原因,通过试验查看,当x的值迭代到正确时,出现了死循环,可能是循环条件的问题,把条件改为下面的式子:

fabs(x-a/x)>=1.0e-6)

结果就正常了。

看一下截图:

目录

在用迭代法求平方根时发现一个问题:

x的值不再变化,但x*x的值与a还有差距0.001,所以死循环。因为实数的非精确存储,乘法运算扩大了这种误差,所以在应用中注意这些细节,才不会出现莫名奇妙的问题。

x的值不再变化,但x*x的值与a还有差距0.001,所以死循环。因为实数的非精确存储,乘法运算扩大了这种误差,所以在应用中注意这些细节,才不会出现莫名奇妙的问题。

#include #include #include void main() { int t1,t2; double x,a=6553500000000; x=a/2.0; while(fabs(x-a/x)>=1.0e-6)) { printf("x=%f\n",x); x=(x+a/x)/2.0; printf("x*x=%f\n",x*x); getchar(); } printf("sqrt(%f)=%lf\n",a,x); printf("sqrt(%f)=%lf\n",a,sqrt(a)); } 圆周率

π不是个公式,它只是一个定值 c÷2r=π。

古人计算圆周率,一般是用割圆法.即用圆的内接或外切正多边形来逼近圆的周长.阿基米德用正96边形得到圆周率小数点后3位的精度;刘徽用正3072边形得到5位精度;鲁道夫用正262边形得到了35位精度.这种基于几何的算法计算量大,速度慢,吃力不讨好.随着数学的发展,数学家们在进行数学研究时有意无意地发现了许多计算圆周率的公式.

编写用公式求π 的近似值的程序,尽可能使精确位数较多。 

#include main() { double sum=1,y=1,f=1.0; int i=1; while(fabs(y)>1e-8) { f=-f; y=f/(2*i+1); sum+=y; i++; } printf("pi=%.14f\n",4*sum); } 圆周率迭代公式 

目录

在用迭代法求平方根时发现一个问题:

x的值不再变化,但x*x的值与a还有差距0.001,所以死循环。因为实数的非精确存储,乘法运算扩大了这种误差,所以在应用中注意这些细节,才不会出现莫名奇妙的问题。

圆周率

圆周率迭代公式 

数学家们研究了数不清的方法来计算PI,这个程序所用的公式如下:

pi = 2 + 1/3 * (2 + 2/5 * (2 + 3/7 * (2 + ...  (2 + k/2k+1 * (2 + ... ))...)))

至于这个公式为什么能够计算出PI,已经超出了本文的能力范围。

下面要做的事情就是要分析清楚程序是如何实现这个公式的。

我们先来验证一下这个公式:

#include void main() { float pi=2; int i; for(i=100;i>=1;i--) pi=pi*(float)i/(2*i+1)+2; printf("%f\n",pi); getchar(); } 上面这个程序的结果是3.141593。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3