关于用c程序计算带来的误差的问题

关于用c程序计算带来的误差的问题,第1张

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个数的最大值、最小值及其差值。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10095962.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存