近似运算

计算兀/4=1-1/3+1/5-1/7+……,直至最后一项小于10的-6次方。

错误做法:

#include<stdio.h>
#include<math.h>

int main()
{
    int i;
    double t,m;
    m=3.14159/4.0;
    for(i=1;;i++)
    {
        if(i%2==0)
            t=(double)-(1/(2*i-1));//括号里面的运算还是整数之间的,得不到double型,强制转换加错地方了
        else
            t=(double)1/(i*2-1);

        while(fabs(t)>(1E-6))//主要问题在这里,你第一次t肯定很大进到这里来一直while出不去所以死循环了
        {
            m+=t;
        }
        break;
    }
    printf("%lf\n",m);//对于double型,scanf里面写%lf,printf里面写%f比较合适

//可以把m初始化为0然后这么加完乘以4得到的应该就是pi的值了,现在这么加结果无意义

    return 0;
}

正确:

#include<stdio.h>
#include<math.h>
int main()
{
    int i;
    double t,m;
    m=0;
    for(i=1;;i++)
    {
        if(i%2==0)
            t=-(1.0/(2*i-1));
      else
            t=1.0/(i*2-1);

        if(fabs(t)>(1E-6))
      {
            m+=t;
        }
        else break;
    }
    printf("%f\n",m*4);

    return 0;
}

希望还有更好的方法提供……

近似运算

时间: 2024-11-07 04:25:03

近似运算的相关文章

算法(第4版)-1.4.3 数学模型

总结:本小节讲述了近似运算时间.增长数量级和成本模型的概念以及算法的分析方法. 重点: 1. Knuth的基本见地很简单--一个程序运行的总时间主要和两点有关: · 执行每条语句的耗时: · 执行每条语句的频率. 前者取决于计算机.Java编译器和操作系统,后者取决于程序本身和输入. 如果对于程序的所有部分我们都知道了这些性质,可以将它们相乘并将程序中所有指令的成本相加得到总运行时间. 如果我没理解错误,我们主要研究的是执行每条语句的频率. 2. 我们常常使用约等于号(~)来忽略较小的项,从而大

T010 高度判断

#include<stdio.h> #include<math.h> int main() { float x, y; scanf("%f,%f", &x, &y); if(pow((x-2),2)+pow((y-2),2)<=1||pow((x+2),2)+pow((y-2),2)<=1||pow((x-2),2)+pow((y+2),2)<=1||pow((x+2),2)+pow((y+2),2)<=1) printf

hdu4803 Poor Warehouse Keeper

给定两个数字显示板A, B和两个按钮,按下按钮使得其对应数字显示增加1. 另,B显示板只显示其实际值的整数部分.两显示器对应的实际值有一个比值p. 按下A板上的按钮, A板上显示的数增加1到a + 1, p不变,B板上的数字更新为(int)(b * (a + 1) / a). 按下B板上的按钮,A板上上显示的数值不变,B 板加1 到b + 1,p更新为(b + 1) / a. 给定目标状态(a1, b1),问至少经过多少次按下按钮可从初始状态(1, 1)到达该状态. 若不可达输出-1. 显然按下

mysql_数据库设计类型选择及优化

数据库设计原则: a,更小的通常更好. 应该尽量使用可以正确存储数据的最小数据类型.如只要存储0-200,tinyint unsigned更好 b,简单就好 简单的数据类型的操作需要更少的cpu周期.同时后期优化也更为容易. c,尽量避免使用null mysql在建立索引,优化过程对null需要做特殊处理,耗费额外资源.非特殊情况,避免使用null. 数据类型常识 一,整数类型 根据存储空间: TINYINT SMALLINT MEDIUMINT INT BIGINT 存储空间位数n 8 16

功能模块LinearMath

.title { text-align: center; margin-bottom: .2em } .subtitle { text-align: center; font-size: medium; font-weight: bold; margin-top: 0 } .todo { font-family: monospace; color: red } .done { font-family: monospace; color: green } .priority { font-fami

知识总结7

英语: 背下100个单词,百词斩与配套资料,孰知其意,练习听力,并且做了2篇阅读. C语言: 复习逻辑运算符与逻辑表达式 位逻辑运算符与位逻辑表达式 逗号运算符与逗号表达式 复合赋值运算符 高数: 学习隐函数及由参数方程所确定的函数的导数 隐函数的导数: 了解显函数.隐函数. 隐函数的显化:把一个隐函数化成显函数. 学习隐函数的求导法则:直接求导法.微分法.公式法. 学习对数求导法的基本公式 学习由参数方程所确定的函数的求导法则 复合函数求导中的隐函数的求导法并进行以上法则的运用. 了解相关变化

程序员必知之浮点数运算原理详解

导读:浮点数运算是一个非常有技术含量的话题,不太容易掌握.许多程序员都不清楚使用==操作符比较float/double类型的话到底出现什么问题. 许多人使用float/double进行货币计算时经常会犯错.这篇文章是这一系列中的精华,所有的软件开发人员都应该读一下. 随着你经验的增长,你肯定 想去深入了解一些常见的东西的细节,浮点数运算就是其中之一. 1. 什么是浮点数? 在计算机系统的发展过程中,曾经提出过多种方法表达实数. [1]典型的比如相对于浮点数的定点数(Fixed Point Num

匹夫细说C#:妥协与取舍,解构C#中的小数运算

题外话 正文开始之前,我首先要感谢博客园提供的这个优秀的平台.通过在这个优秀的平台上和很多志同道合的朋友交流,互相帮助,我也很荣幸的获得了15年的微软MVP的奖项.也使我更加坚信了代码改变世界.感激!感恩!努力!加油! 0x00 前言 慕容在生活和工作中常常会遇到一些十分迷信机器的人,他们之中很多人都相信机器是最理智的,没有任何感情,是真正的铁面无私,因此机器的运算所给出的答案总是正确的,如果答案错误,那么一定是操作机器的人的问题.但机器的运算就一定是正确的吗?事实上,机器出现运算错误并不是一个

Matlab 符号运算

root(p):多项式求根.多项式等于0时对应方程的根. 例:,则输入p=[5 4 3 2 1]; root(p) 注:多项式系数都是按幂指数递减形式的. poly([a,b,c]):求已知根为a,b,c所对应的多项式. 例:>>P1=ploy([2,3,4]) P1= 1 -9 26 -24 %即所求多项式为 可以看出,root 和ploy互为逆运算. 注:ploy也可以求特征根.ploy(X):即求矩阵X的特征根. ployval(p,a):输出指定点x=a时的多项式值. conv(p,q