| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1905 人关注过本帖
标题:c语言中的浮点数运算的疑问
只看楼主 加入收藏
sy070904
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2011-8-23
结帖率:100%
收藏
 问题点数:0 回复次数:11 
c语言中的浮点数运算的疑问
#include <stdio.h>
int main (void)
{
    float f;
    printf ("please input a float number: \n");
    scanf ("%f",&f);
    printf ("The input is %f or %e.\n",f,f);
    return 0;
}
程序很简单,就是输入一个浮点数,再分别以小数和指数的形式输出来。但以小数输出来时,输出的值比原来的数大,结果如下:

C:\Dev-Cpp>082731104.exe
please input a floatnumber:
21.290000
The input is 21.290001 or 2.129000e+001.

请问这个是为什么呢?难道跟浮点数在计算机的存储方式有关系?
搜索更多相关主题的帖子: c语言 
2011-08-27 11:26
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
收藏
得分:0 
程序代码:
#include <stdio.h>
int main (void)
{
    double f;
    printf ("please input a float number: \n");
    scanf ("%lf",&f);
    printf ("The input is %lf or %e.\n",f,f);
    return 0;
}
float 只能表示小数点后面的4位  改成double就可以了

                                         
===========深入<----------------->浅出============
2011-08-27 12:19
A13433758072
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:广东潮州
等 级:小飞侠
威 望:1
帖 子:1182
专家分:2784
注 册:2010-7-22
收藏
得分:0 
回复 楼主 sy070904
这是内存误差,float的有效位数只有7位. 你要更高精度, 得采用double

一步一个脚印...............................默默地前进.....
诚邀乐于解答c菜鸟问题,的热心网友加入,  QQ群38490319
2011-08-27 23:23
dreamofgod
Rank: 5Rank: 5
等 级:职业侠客
帖 子:194
专家分:341
注 册:2011-8-16
收藏
得分:0 
我也想知道原因,一般浮点的误差是比原数值小,比原数值大……这个不符合我的理论知识。
敬等大牛解释。

一个单片机就让我头疼不已~~~
2011-08-28 07:59
A13433758072
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:广东潮州
等 级:小飞侠
威 望:1
帖 子:1182
专家分:2784
注 册:2010-7-22
收藏
得分:0 
回复 4楼 dreamofgod
你的理论哪来的啊???

一步一个脚印...............................默默地前进.....
诚邀乐于解答c菜鸟问题,的热心网友加入,  QQ群38490319
2011-08-28 10:33
qq8801103
Rank: 5Rank: 5
来 自:苏州中科大软件学院
等 级:职业侠客
威 望:1
帖 子:422
专家分:340
注 册:2009-10-8
收藏
得分:0 
楼主的运行结果好像不对  

Discuz!  
好好学习  天天向上
2011-08-28 15:18
sy070904
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2011-8-23
收藏
得分:0 
以下是引用qq8801103在2011-8-28 15:18:15的发言:

楼主的运行结果好像不对  

你指的是 a floatnumber 吗?这是我修改过的。
2011-08-28 20:43
sy070904
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2011-8-23
收藏
得分:0 
以下是引用A13433758072在2011-8-27 23:23:27的发言:

这是内存误差,float的有效位数只有7位. 你要更高精度, 得采用double

书上说float至少能表示6位有效数字,这里的有效数字是指小数点后面的6位数吧?
2011-08-28 20:45
sy070904
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2011-8-23
收藏
得分:0 
以下是引用A13433758072在2011-8-27 23:23:27的发言:

这是内存误差,float的有效位数只有7位. 你要更高精度, 得采用double


如果我把f定义成double的话,输入值还是21.290000,但输出结果却是这样的:

C:\Dev-Cpp>201108282052.exe
please input a float number:
21.290000
The input is 0.000000 or 4.788294e-314.

如果我定义一个double,赋值21.290000,输出结果就是正确的了。

这是不是我的编译环境或者系统的问题?
2011-08-28 21:04
A13433758072
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:广东潮州
等 级:小飞侠
威 望:1
帖 子:1182
专家分:2784
注 册:2010-7-22
收藏
得分:0 
回复 8楼 sy070904
小数点后6位小数,一般输出六位,至于输出的值可能有点误差,这是内存问题,与程序无关,与系统我就不知

一步一个脚印...............................默默地前进.....
诚邀乐于解答c菜鸟问题,的热心网友加入,  QQ群38490319
2011-08-28 21:24
快速回复:c语言中的浮点数运算的疑问
数据加载中...
 
   



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

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