首页
社区
课程
招聘
[旧帖] [求助]诚惶诚恐--关于C的问题 0.00雪花
发表于: 2008-10-5 18:00 3238

[旧帖] [求助]诚惶诚恐--关于C的问题 0.00雪花

2008-10-5 18:00
3238
各位大家下午好,诚惶诚恐在此发贴问一简单问题,忘各位不吝赐教。
  

  下面就是我一直调试的c:
  #define PI 3.1416
    main()
    {
        float Radius,Area;   
        scanf("%f",&Radius);      /*输入半径的值*/
        Area=PI*Radius*Radius;  
        printf("%f\n",Area);      /*输出圆的面积*/
    }
    上面的代码语法是没错误,只是运行结果有些与期望值不符,比如:
    (1).运行,输入4,期望值:50.265600; 但是运行结果:50.265598。
   (2).运行,输入8,期望值:201.06240; 但是运行结果:201.062393。
   Area定义的是float,按常理来说浮点型变量能保证的有效数字是7位,后面的数字是无意义的,但从上面的运行结果看来(1)的运行结果在第6位就于期望值不符,(2)的运行结果在第7位与期望值不符。期望值肯定不会错,算了好多遍。我只是不明白程序在运行的过程中在哪个地方发生改变以至于与我的期望值不符。
    往有高手指教,不知道我这样的题放在这有没有与看雪论坛风格有抵触,大家见笑了。

[课程]Android-CTF解题方法汇总!

收藏
免费 0
支持
分享
最新回复 (8)
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
我觉得和浮点数在计算机中的表示有关系,浮点数在计算机中是不能精确表示的,所以我个人感觉问题出在Area=PI*Radius*Radius;,但是精确度能差多少就不知道了。不知对不对,个人看法,希望高手指点。
2008-10-5 20:32
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
#define PI 3.1416
#include  "stdio.h"
void main()
{
    float Radius,Area;   
    scanf("%f",&Radius);      /*输入半径的值*/
    Area=PI*Radius*Radius;  
    printf("%f\n",Area);      /*输出圆的面积*/
}

我的运行结果完全正确,我的是vc6
2008-10-5 20:43
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
2008-10-5 21:05
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
不知我发的图,楼主能否看到,
还有:不知楼主的编程环境是什么?
我的是vc6.0
2008-10-5 21:06
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
原因是这样的,如果float为32位的话,尾数有23位,即用来保存精度的位数。
50.265600 (d)
= 110010.01000011111111100101110010010001110100010100111... (b)
= 1.1001001000011111111100101110010010001110100010100111...E+101 (b)
因为只能保存23位精度,后面就被忽略了。(注:最左边的1默认省略)
因此=1.10010010000111111111001E+101 (b)
转为10进制约为 50.265598 (d)
2008-10-5 21:39
0
雪    币: 151
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
楼主的编译器有问题啊。
2008-10-5 23:01
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
楼主在哪里,能说一下你的编译器用的是哪个吗?
2008-10-6 08:16
0
雪    币: 247
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
定义成double类型看看
2008-10-6 10:39
0
游客
登录 | 注册 方可回帖
返回
//