标题:[求助] 用数组存储商,结果更精确,可是哪儿错了?
只看楼主
–★–
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1512
专家分:0
注 册:2006-5-1
得分:0 
回复:(穆扬)以下是引用–★–在2006-6-2 13:37:00的...
以下是引用穆扬在2006-6-2 17:19:00的发言:

3.4(一位有效数字)除以3等于几啊,你求出了小数点后面的值有意义吗

好像还有一些别的除数嘛,例如365.2422、29.5306和1.602e-19之类,您知道这些数字的含义么?


落霞与孤鹜齐飞,秋水共长天一色! 心有多大,路有多宽。三教九流,鸡鸣狗盗。兼收并蓄,海纳百川。
2006-06-03 07:01
穆扬
Rank: 1
等 级:禁止发言
帖 子:1910
专家分:0
注 册:2006-6-1
得分:0 
提示: 作者被禁止或删除 内容自动屏蔽

2006-06-03 09:22
zhangjuan
Rank: 1
等 级:新手上路
帖 子:992
专家分:0
注 册:2006-1-19
得分:0 
以下是引用lyle3在2006-6-2 11:23:00的发言:

我想用数组存储除法运算的商,让结果更精确, 可是结果有错? 程序哪儿错了???
#include "stdio.h"
void main()
{
float a,b;
char c[100];int i;
printf("enter the numbers(a/b):\n");
scanf("%f/%f",&a,&b);
getchar();
if(a>=b)
{
c[0] = (int)(a/b);/*这里数据类型不匹配*/
c[1] = '.';
}
else
{
c[0] = 0;
c[1] = '.';
}
for(i=2;i<=100;i++)
{
a = (a/b - (int)(a/b)) * b;/*应该用另外的变量存储吧*/
c[i] = (int)(a/b); /*这一句没必要吧*/
}
printf("the result is: ");
for(i = 0; i <= 100; i ++)
printf("%d",c[i]);
printf("\n");
}

不可能达到精确,大家都知道浮点数是怎么产生的吧,有效位只有7位,而后面几位是根据
热量产生,我也说不清楚

2006-06-03 09:26
soft_wind
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:1430
专家分:0
注 册:2006-4-5
得分:0 
以下是引用lyle3在2006-6-2 11:23:00的发言:

我想用数组存储除法运算的商,让结果更精确, 可是结果有错? 程序哪儿错了???
#include "stdio.h"
void main()
{
float a,b,d;
char c[100]={'\0'};int i,e;

printf("enter the numbers(a/b):\n");
scanf("%f/%f",&a,&b);
getchar();
if(a>=b)
{
c[0] =(int)(a/b)+48;
c[1] = '.';
}
else
{
c[0] =48;
c[1] = '.';
}
for(i=2;i<=100;i++)
{
d=a/b;
e=(int)a/b;
a = (d-e) * b*10;
c[i] = (int)(a/b)+48;
}
printf("the result is: ");
for(i = 0; i <= 100; i ++)
printf("%c",c[i]);
printf("\n");

}

您这种想法挺好,可是有问题。受到float 精度的影响,在算到一定位上是会出错的,上面的程序帮您改了些毛病,
但这个程序仍是错的,原因就是float的精度影响


对不礼貌的女生收钱......
2006-06-03 09:52
lyle3
Rank: 1
等 级:新手上路
帖 子:80
专家分:0
注 册:2006-5-19
得分:0 
如果把除数和被除数都置为整数
那可以使结果更精确吗?????????

我将再给你一次选择的机会............... QQ:514897584
2006-06-03 10:26
soft_wind
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:1430
专家分:0
注 册:2006-4-5
得分:0 

#include "stdio.h"
#include "malloc.h"
#include "math.h"
#define MAX 100

int main()
{
long *resource,k;
int result[MAX]={0},num,i,j;

printf("please input the num of tese data:\n");
scanf("%d",&num);
resource=(long *)malloc( sizeof(long) *num );
printf("please input the test data:\n");
for(i=0;i<num;i++)
scanf("%ld",&resource[i]);
for(i=0;i<num;i++)
{
j=0; k=1;
if(resource[i]==1)
{
printf("1\n");
continue;
}
while(resource[i]%10==0)
{
result[j++]=0;
resource[i]/=10;
}
if ( resource[i]==1 )
{
result[j-1]=1;
k=0;
}

while(k!=0&&j<MAX)
{
while( (k*=10)<resource[i] )
result[j++]=0;
result[j++]=k/resource[i];
k %= resource[i];
}
printf("0.");
for(k=0;k<j;k++)
{
printf("%d",result[k]);
result[k]=0;
}
printf("\n");
}
free(resource);
getch();
return 0;
}


这个是版主老大(feng1256)写的,您可以参考参考.
程序是求一个整数的倒数(1/k)


对不礼貌的女生收钱......
2006-06-03 10:38
feng1256
Rank: 4
等 级:贵宾
威 望:14
帖 子:2899
专家分:0
注 册:2005-11-24
得分:0 
以下是引用soft_wind在2006-6-3 10:38:00的发言:




这个是版主老大(feng1256)写的,您可以参考参考.
程序是求一个整数的倒数(1/k)

诬陷我吧? 我啥时候写的!


叁蓙大山:工謪、稅務、嗣發 抱歉:不回答女人的问题
2006-06-03 21:57
soft_wind
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:1430
专家分:0
注 册:2006-4-5
得分:0 

不知道,那帖子我找不到了。不过确实是您写的!
我在我MP3里都标注了是您的作品!


对不礼貌的女生收钱......
2006-06-04 09:26
–★–
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1512
专家分:0
注 册:2006-5-1
得分:0 
#include<stdio.h>
main( )
{
float x,y;
long int i;
for(i=1;;i++)
{
x=i;y=i+1;
if(x==y)break;
}
printf("%f\n",x);
}
//运行结果16777216
//这是float模拟整型数的极限
//因此楼主如果追求高精度
//倒不如用unsigned long
//同样4字节,后者达42亿多
//继续支持楼主的创新意识

落霞与孤鹜齐飞,秋水共长天一色! 心有多大,路有多宽。三教九流,鸡鸣狗盗。兼收并蓄,海纳百川。
2006-06-04 11:42



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-69226-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.135317 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved