0


公式法求圆周率的近似值——泰勒公式展开 (内含double与float的比较)

泰勒公式是数学中求近似值的常用方法,利用泰勒公式展开,可以使许多问题简化,当然也需要多次循环,类似这样的情况,利用编程循环结构就是再好不过的选择了。

题目:计算π=4*(1-1/3+1/5-1/7+······),直到最后一项小于10^16。(也就是1e-6)

解法:

#include<stdio.h>
int main()
{
double sum=0;
for(int i=0;;i++)
{
double term=1.0/(i2+1);
if(i%2==1)
sum-=term;
else
sum+=term;
if(term<1e-6)break;
}
printf("%.6f\n",sum
4);
return 0;
}

本例中sum和term都定义为double类型的变量。double类型的变量占8个字节(64位的储存空间),最多提供16位有效数字,小数点后默认保留6位。如果是最终结果是整数,做多提供15位有效数字。break是跳出整个循环结构。对于一些初学者,“%.6f”可能还不知道是什么意思,别着急,听我慢慢讲解。

首先,double和float的比较

float是单精度浮点型,内存占4个字节;double是双精度浮点型,内存占8个字节。double的精度更高。

float的指数范围为-127128;double的指数范围为-10231024。

float只能提供7位有效数字;double可以提供16位有效数字。

float类型的说明符是%f;double类型的说明符是%lf。但是一般情况下%f也是可以输出double的。

第二,读者可以注意到,在这个程序中,出现了“+=”和“-=”的字样。n+=1就相当于n=n+1。理解就可以了。

第三,“%.6f\n"的问题。

      %m.nf   的含义就是输出单精度(或双精度浮点型),并且小数点后输出n位,整个数字(将小数点算作以为)输出为m位。如果有类似m小于n的情况,小数点后仍然输出n位,小数点前结果保持真实值;如果整个小数的真实值还不足m位时,那么整个数字前面用空格填补,使整个部分长度为m。当然也会出现其他情况,读着可以自己在编译器中尝试输入,查看结果。

第四,说明一下1e-6的含义。1e-6是C语言中一种计数形式,1表示尾数,e表示阶码标志,-6表示阶码。它的意思就是10^-6即0.000001,看不明白的先记住就可以了,在以后的学习中你会慢慢理解的。

学习编程语言需要紧密地联系实践,根据编译器的结果调整自己的代码,不管走哪条路,最后得到正确的结果才是王道,不必像学数学和物理一样纠结其深层原理!

当然,这道题还可以使用do-while结构,在以后的文章中会讲到。

标签:

本文转载自: https://blog.csdn.net/wzy_jq/article/details/118310778
版权归原作者 wzy_jq 所有, 如有侵权,请联系我们删除。

“公式法求圆周率的近似值——泰勒公式展开 (内含double与float的比较)”的评论:

还没有评论