复试 求sinx在x=0处的泰勒展开式,精确到10e-7

以及求cosx在x=0出的泰勒展开式,精确到。。。

1.

#INF:这个值表示“无穷大inf (infinity 的缩写)”,即超出了计算机可以表示的浮点数的最大范围(或者说超过了 double 类型的最大值)。一般来说是除数为0得出的结果,例如,当一个整数除以0时便会得到一个1.#INF / inf值;相应的,如果一个负整数除以0会得到 -1.#INF / -inf 值。

2.

#IND:这个的情况更复杂,一般来说,它们来自于任何未定义结果(非法)的浮点数运算。"IND"是 indeterminate(不确定) 的缩写,而"nan"是 not a number 的缩写。IND表示NAN, 比如 0/0 log( -1 ) 等等。IND是Windows上的说法,NaN是Linux上的说法,含义是一样的。产生这个值的常见例子有:对负数开平方,对负数取对数,0.0/0.0,0.0*∞, ∞/∞ 等。也可能由于一些操作使得程序中产生了无效数字或者没有给成员变量赋值,使用类似于pow, exp等等函数时常会产生一个无效数字1.#IND00(-1.#IND00 对应符号位 1 , 阶码全1 , 尾数非0 )。

0.一个约分函数(没卵用)

先写一个分数约分的函数
void Yuefen(int &c,int &d) //一个可以约分的程序
{

int a=c;int b=d;
int ifchange=1;
while(ifchange==1)
{ifchange=0;
for(int i=2;i<=a&&i<=b;i++)
{if((a%i==0)&&(b%i==0)){a/=i;b/=i;ifchange=1;}}
}
c=a;d=b;

}
int main()
{
int a,b;
while(1)
{
cin>>a;
cin>>b;
Yuefen(a,b);
cout<<a<<"/"<<b<<endl;
}
int c;cin>>c;
}

1.

/****求sinx的值,精确到10的-7次方/
int jingdu(double x)
{
if(x>-0.0000001&&x<0.0000001) return 1;
else return 0;
}
double xi(int x)//系数,即级数的倒数
{
long int result=1;
if(x0||x1) return result;

else for(int i=1;i<=x;i++)
{result=result*i;
}
return (double)1/result;

}
double mi(double a,int i)//次方项的计算
{
double result=1;
if(i0) return result;
else for(int j=1;j<=i;j++)
{
result=result*a;
}
return result;
}
int positive(int i)
{
if(i%21) return 1;
else return -1;
}
double entity(double x,int i)//当输入为x时的第i项;
{
double zhengfu=positive(i);
double xishu=xi(2i-1);
double miresult=mi(x,2
i-1);

double result=zhengfu*xishu*miresult;
cout<<zhengfu<<"  "<<xishu<<"   "<<miresult<<"   "<<result<<endl;
return result;

}
****求sinx的值,精确到10的-7次方/
int main()
{
double in;
cin>>in;
cout<<in<<endl;
double result=0;
for(int i=1;/jingdu(entity(in,i))==0/i<=10;i++)为了方便起见,并且因为计算时出错,所以只是循环了十次
{
result=result+entity(in,i);
}
cout<<“最终结果:”<<result<<endl;
/while(1)
{
int k;
cin>>k;
cout<<entity(0.26,k)<<endl;
}
/
int c;
cin>>c;

}
运行结果如下:
可以看到在计算过程中1/13!已经不对,正确结果应为1.605904384e-10,甚至可以看到在1/17!的时候出现了负数!下面分析原因。

2.出错原因

因为在以上的函数中在求级数的倒数时,先用了一个int型数据保存的级数,而int型数据位数有限,导致在处理1/13!的级数时先用int保存了13!,然而int型并不能保存这么多的位数,导致溢出,这在编程时是一个很容易忽视的问题,也是一个很隐蔽的问题。也就是说,数据达到13!的规模的时候就不能用int来保存了。
因此求系数的函数double xi(int i)修改如下:
double xi(int x)
{
double result=1;
if(x0||x1) return result;

else for(int i=1;i<=x;i++)
{result=result/i;
}
return result;

}
用double小数点后的精度来弥补int长度的不足。

3.完整代码如下:

int jingdu(double x)
{
if(x>-0.0000001&&x<0.0000001) return 1;
else return 0;
}
double xi(int x)
{
double result=1;
if(x0||x1) return result;

else for(int i=1;i<=x;i++)
{result=result/i;
}
return result;

}
double mi(double a,int i)
{
double result=1;
if(i0) return result;
else for(int j=1;j<=i;j++)
{
result=result*a;
}
return result;
}
int positive(int i)
{
if(i%21) return 1;
else return -1;
}
double entity(double x,int i)//当输入为x时的第i项;
{
double zhengfu=positive(i);
double xishu=xi(2i-1);
double miresult=mi(x,2
i-1);

double result=zhengfu*xishu*miresult;
cout<<zhengfu<<"  "<<xishu<<"   "<<miresult<<"   "<<result<<endl;
return result;

}
//****求sinx的值,精确到10的-7次方/
int main()
{
double in;
cin>>in;
cout<<in<<endl;
double result=0;
for(int i=1;jingdu(entity(in,i))==0;i++)
{
result=result+entity(in,i);
}
cout<<“最终结果:”<<result<<endl;
/while(1)
{
int k;
cin>>k;
cout<<entity(0.26,k)<<endl;
}
/
int c;
cin>>c;

}

4.结论

1.

一定要注意溢出这个不常见但是很难察觉的问题!

2.

无论是直接int=123*…,还是x的结果/(1234…),都会溢出,尤其是第二项,他会将后面部分的除数先算出来并保存到一个int型数据中,一般就会溢出,基本数据错误就是出现在这里,因此这类问题尽量使用double来保存数据;
错误用法:
double a=1/4: 错误!结果是先按int算1/4=0,a=0;
正确写法:
double b=1;c=4;
double a=b/c;
或者:
double a=(double)1/4;

第二次编程出错代码:

#include
#include
using namespace std;
int symbol(int n)
{
if(n%2==0) return 1;
else return -1;
}
double cifang(double x,int n)
{
double outcome=1;
for(int i=0;i<=n;i++)//此处应从1开始
{
outcome=outcomex;
}
cout<<“次方:”<<outcome<<" ";
return outcome;
}
double jiecheng(int n)
{
double outcome=1;
for(int i=1;i<=n;i++)
{
outcome=outcome
i;
}
cout<<“阶乘:”<<outcome<<" ";
return outcome;

}
double jueduizhi(double x)
{
if(x<0) return -1x;
else return x;
}
double dinxiang(double x,int n)
{
return symbol(n)
cifang(x,2n)/(double)jiecheng(2n);
}
int main()
{
double x;
cin>>x;
double kuhanshu=cos(x);
double outcome=0;
double jingdu;
cin>>jingdu;
for(int i=0;i<=10/jueduizhi(outcome-kuhanshu)>=jingdu/;i++)
{
outcome=outcome+dinxiang(x,i);cout<<“第”<<i<<“项:”<<dinxiang<<endl;//此处dinxiang应该为dinxiang(x,i);怪不得输出结果老是含有数字和字母,看起来像十六进制的数。
}
cout<<outcome<<endl;
}

复试:求sinx,cosx在x=0处的泰勒展开式,精确到10e-7,以及编程中出的错误相关推荐

  1. 写一个用矩阵法求定积分的通用函数,分别求sinx,cosx,exp(x)的定积分

    /*写一个用矩阵法求定积分的通用函数,分别求sinx,cosx,exp(x)的定积分*/#include <stdio.h> #include <math.h> #define ...

  2. C语言用矩形法求定积分的通用函数,分别求 sinx, cosx,e^x

    要求: 写一个用矩形法求定积分的通用函数,分别求:sin(x),cos(x),e^x . 分析: 矩形法,学过高等数学就知道化曲为直的思想.将定积分化为多个函数连续的和.基本思想是将区间[a,b]化成 ...

  3. 写一个用矩形法求定积分的通用公式,分别求 sinx在0-1上积分,cosx在0-1上积分,e^x在0-1上积分

    写一个用矩形法求定积分的通用公式,分别求 sinx在0-1上积分,cosx在0-1上积分,e^x在0-1上积分 #include <stdio.h> #include <stdlib ...

  4. 用指针、子函数的方法去一维数组中所有元素的平均值,并放在a[0]处

    <程序设计基础实训指导教程-c语言> ISBN 978-7-03-032846-5 p142 7.1.2 上级实训内容 [实训内容7]用指针.子函数的方法去一维数组中所有元素的平均值,并放 ...

  5. C语言试题二十之利用以下的简单迭代方法求方程cos(x)-x=0的一个实根。

    1. 题目 编写函数function,它的功能是:利用以下的简单迭代方法求方程cos(x)-x=0的一个实根. 迭代步骤如下: (1)取x1初值为0.0: (2)x0=x1,把x1的值赋各x0; (3 ...

  6. matplotlib sinx cosx 图像

    from matplotlib import pyplot as plt import numpy as np plt.figure(figsize=(12,6))#生成的图片的大小 x = np.l ...

  7. python求sinx近似值_c语言求sinx的近似值 c语言求sinx近似值

    #includevoid main(){ float x,a=0,b,t,n=1,s=1,c=1; printf("请输入x的值:"); scanf("%f", ...

  8. 求sinx的近似值 c语言,用C语言求多项式求sinx的近似值。

    用C语言求多项式求sinx的近似值. 來源:互聯網  2010-12-22 19:59:48  評論 分類: 電腦/網絡 >> 程序設計 >> 其他編程語言 問題描述: 3.利 ...

  9. C++代码实现atanx,atan2x,acosx,asinx,sinx,cosx,tanx三角函数、开方函数sqrtND()

    C++代码实现atanx,atan2x,acosx,asinx,sinx,cosx,tanx三角函数.开方函数sqrtND() 一.开平方函数,牛顿迭代法sqrtND() double sqrtND( ...

最新文章

  1. 在线作图丨绘制一个含饼图的组内网络分析图(Network Analysis)
  2. SAP RETAIL 特征参数文件(Characteristic Profile) II
  3. c语言编程员工管理的代码,员工信息管理完整(含附源代码).doc
  4. javascript --执行上下文,作用域
  5. 【剑指Offer】18树的子结构
  6. 第四范式完成超10亿元C轮融资,估值12亿美元
  7. 怎么判断日出时间早晚_怎样判断一个地方的日出或日落时间
  8. 常见音频编码格式总结
  9. python初步判断车牌
  10. 微积分专项----MIT GS老师
  11. 计算机主机是什么系统吗,电脑RAM和ROM的区别是什么?RAM和ROM有哪些作用?
  12. 传说中的“高温补贴”
  13. poj3518(Prime Grap 欧拉筛+二分)
  14. CAN通讯原理简介(一)
  15. 统计学习(三):分类
  16. 【洛谷P3014】Cow Line
  17. 关于毕业设计的总结与思考
  18. 条形码打印机无法打印条形码
  19. 【模型检测学习笔记】6:线性时序性质(Linear-time Properties)
  20. 怎样看待活文档“ATDD”---记敏捷中国2012 open space

热门文章

  1. Matlab如何安装k-Wave
  2. 【GDKOI】2021普及Day2
  3. wdcp 安装php,WDCP V3.2面板安装且新增PHP多版本和免费Let's Encrypt SSL证书
  4. 计算机二级不看教材只刷题可以吗,初级会计备考只刷题不买教材行不行?可以通过吗?...
  5. 字节跳动架构师讲解Android开发!已成功拿下字节、腾讯、脉脉offer,含BATJM大厂
  6. 热乎乎的面试经验(java后端开发-5k-天津)
  7. 《数据结构与算法》—— O(3N)=O(N) ?
  8. CSS 伪类: 什么是 CSS 伪类?CSS 伪类怎么分类? CSS 伪类有哪些?以及分类对应的伪类
  9. python字典及基本操作
  10. 窦靖童手缠绷带秀英俊侧脸 网友直呼帅哭