1由于使用浮点数而造成的误差,在计算机中存储的浮点数有精度差,比如说输入一个整数n赋值给一个浮点型变量,则其存储的实际数字是(n-1)。999999999或其他接近于该整数的浮点数
2由于计算中的运算符使用错误,比如3(1/2)=0而31/2=15或类似的错误
3由于取值范围的限制而导致的误差,例如在应使用double或更精确位数的类型时使用了float等
4在不同的机器上、不同的系统中也会带来误差
#include "stdioh"
#define n 5
#define m 6
{
double x[n+1]={040,055,065,080,090,105};
double y[n+1]={041057,057815,069675,088811,102652,125386};
double xx=0596;
void main()
{int k;double p;
double f[n+1][n+1];
void basfunc();
basfunc(x,y,f);
for(k=n-1; k>=0; k--)
{
p=p(xx-x[k])+f[k][k];
}
printf("\nP(%lf)=%lf",xx,p);
}
void basfunc(x,y,f)
{int i,j;
for(i=0;i<=n;i++)
f[i][0]=y[i];
for(j=1;j<=n;j++)
for(i=j;i<=n;i++)
f[i][j]=(f[i][j-1]-f[i-1][j-1])/(x[i]-x[i-j]);
}
}
}
输入内容已经达到长度限制还能输入 9999 字插入删除插入地图删除地图插入视频视频地图回答即可得2分经验值,回答被采纳可同步增加经验值和财富值
参考资料:
回答 共2条
2011-10-17 09:34 liu_zhongfeng | 六级
#include "stdioh"
#define n 5
#define m 6
double x[n+1]={040,055,065,080,090,105};
double y[n+1]={041057,057815,069675,088811,102652,125386};
double xx=0596;
void main()
{int k;double p;
double f[n+1][n+1];
void basfunc(double x[n+1],double y[n+1],double f[n+1][n+1]);
basfunc(x,y,f);
for(k=n-1; k>=0; k--)
{
p=p(xx-x[k])+f[k][k];
}
printf("\nP(%lf)=%lf",xx,p);
getchar();
}
void basfunc(double x[n+1],double y[n+1],double f[n+1][n+1])
{int i,j;
for(i=0;i<=n;i++)
f[i][0]=y[i];
for(j=1;j<=n;j++)
for(i=j;i<=n;i++)
f[i][j]=(f[i][j-1]-f[i-1][j-1])/(x[i]-x[i-j]);
}
只改了语法,逻辑计算是否正确得你测试下。 赞同0 2011-10-17 09:37 倒霉熊lujin | 十二级
错误已修改,详见下面注释。
#include "stdioh"
#define n 5
#define m 6
//{//这个大括号,用来??
double x[n+1]={040,055,065,080,090,105};
double y[n+1]={041057,057815,069675,088811,102652,125386};
double xx=0596;
void main()
{int k;double p;
double f[n+1][n+1];
void basfunc(double f[][n+1]); //这里需要传递参数的。
basfunc(f);
for(k=n-1; k>=0; k--)
{
p=p(xx-x[k])+f[k][k];
}
printf("\nP(%lf)=%lf",xx,p);
getchar();
}
void basfunc(double f[][n+1]) //这里的参数传递。
{int i,j;
for(i=0;i<=n;i++)
f[i][0]=y[i];
for(j=1;j<=n;j++)
for(i=j;i<=n;i++)
{ //这里少一个{
f[i][j]=(f[i][j-1]-f[i-1][j-1])/(x[i]-x[i-j]);
}
}
//}//这里多了一个。
public class T {
public static void main(String[] args) {
int[] a = new int[10];
int max = 0;
int min = 0;
BufferedReader buf=new BufferedReader(new InputStreamReader(Systemin));
for (int i = 0; i < 10; i++) {
Systemoutprintln("请输入一个数:");
a[i] = IntegerparseInt(bufreadline());
Systemoutprint(a[i] + "\t");
}
Systemoutprintln();
max = a[0];
// 求最大值
for (int i = 0; i < 9; i++) {
if (a[0] < a[i + 1]) {
a[0] = a[i + 1];
max = a[0];
}
}
Systemoutprintln("最大值是: " + max);
min = a[0];
// 求最小值
for (int i = 0; i < 9; i++) {
if (a[0] > a[i + 1]) {
a[0] = a[i + 1];
min = a[0];
}
}
Systemoutprintln("最小值是: " + min);
int dif=max-min;
Systemoutprintln("差值为:"+dif);
}
}
代码参考:
#include<stdioh>void main()
{
int a,b,c;
printf("减数:");
scanf("%d",&a);
printf("被减数:");
scanf("%d",&b);
c=a-b;
printf("减数减去被减数的差为%d\n",c);
}
使用的代码,主要的疏漏是比较之后,要使用一个临时变量储存当前较大值,即可,修改之后是:#include<iostream>
using
namespace
std;int
max(int
x,int
y,int
z,int
g)
{
int
t1,t2;
t1=x>yx:y;
//t1
is
max
in
x,y;
t2=t1>zt1:z;
//t2
is
max
in
x,y,z;
return(t2>gt2:g);
//return
the
max
in
x,y,z,g
}
int
min(int
x,int
y,int
z,int
g)
{
int
t1,t2;
t1=x<yx:y;
//t1
is
min
in
x,y;
t2=t1<zt1:z;
//t2
is
min
in
x,y,z;
return(t2<gt2:g);
//return
the
min
in
x,y,z,g
}int
dif(int
x,int
y,int
z,int
g)
{
return
max(x,y,z,g)-min(x,y,z,g);
}
void
main()
{
int
a,b,c,d;
cout<<"求四个数中的最大数和最小数的差值!请输入四个整数:"<<endl;
cin>>a>>b>>c>>d;
cout<<"最大数减去最小数的差为:"<<dif(a,b,c,d)<<endl;
}附运行截图:
以上就是关于关于用c程序计算带来的误差的问题全部的内容,包括:关于用c程序计算带来的误差的问题、牛顿差值c程序~~求救~~老有错~、写一个Java程序,输出10个数的最大值、最小值及其差值。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)