C语言,float x=3.14,计算x*x(3.14*3.14=9.8596),实际计算出来为什么等于9.859601?

Description
已之一个圆的半径,求面积. 提示PI=3.1415
Input

输入有多行,第一行是一个整数n(对应总行数),以下每一行只有一个浮点数(对应一个圆的半径).
Output

输出有多行,每一行是跟输入对应面积. 输出保留6位小数
Sample Input

4
3.14
2.13
6
5.3

Sample Output

30.973933
14.252671
113.094000
88.244735

float类型的数据是有精度的,精度外的数据是不准确的

double比float精度高,但依然有精度

float是小数加止整数后6位是准确的,而double则会更才一些

#include<stdio.h>

#include<stdlib.h>

#define PI 3.1415

void main()

{

 float *p;

 int n;

 scanf("%d",&n);

 p=(float *)malloc(sizeof(float)*n);

 for(int i=0;i<n;i++)

  scanf("%f",&p[i]);

 for(i=0;i<n;i++)

  printf("%.6f\n",p[i]*p[i]*PI);

free(p);

}

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-01-24
ls说的不全对,float梦处理小数点后面6-7位精度,所以精度够了
问题是计算机是用二进制表示数,很多十进制小数二进制表示不出来,就和十进制表示不出来1/3一样,所以才会出现这种问题
第2个回答  2013-01-24
十进制到二进制,再二进制到10进制输出有截断误差。
#include <stdio.h>

main(){
int i,n;
double r;

scanf("%d",&n);
for (i=0;i<n;i++){
scanf("%lf",&r);
printf("%lf\n",3.1415 *r*r);
}
return 0;
}本回答被提问者采纳
第3个回答  2013-01-24
计算机不像拿手计算一样,它存在精度问题,使得小数计算存在问题。

C语言,float x=3.14,计算x*x(3.14*3.14=9.8596),实际计算出来为什么等于9...
float类型的数据是有精度的,精度外的数据是不准确的 double比float精度高,但依然有精度 float是小数加止整数后6位是准确的,而double则会更才一些 include<stdio.h> include<stdlib.h> define PI 3.1415 void main(){ float *p;int n;scanf("%d",&n);p=(float *)malloc(sizeof(float)*n...

相似回答