一个问题,请高手回答(有分)

ambition2005 2003-03-04 12:29:48
我发现如果用文件输入(fstream)一个double,
you dont get exactly the double value.
例如,在文件里有一个数字0.5,用
fstream fin;
fin.open("file name");
double temp;
fin>>temp;
这个temp在系统里其实不是0.5,而是0.5000000 0000000 000003
而且如果用cin就没有这个问题
if(temp==0.5)就会是false, in stead of true
我可以很确定不是我的问题
我写了一个很简单的测试程序
#include <iostream>
#include <fstream>
using namespace std;

void main()
{
double a;
double b;
double c;
ifstream fin;
fin.open("proj1.txt");
fin>>a>>b>>c;
cout <<a<<b<<c;
}

proj1.txt is like following:
0.5 0.3 0.2

then i debug the program, i found that the system actually inputted
a=0.5000000 0000000 000000
b=0.2999999 9999999 9999999
b=0.2000000 0000000 0000001
actually system 把0.29999999 999999 999看作了0.3



请问到底为什么?(我用的是VC)
...全文
21 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
JoshuaLi 2003-03-04
  • 打赏
  • 举报
回复
haha 数字变成了连续的,任意两个数字中间存在任意多个数字。没有离散数学:)
Bandry 2003-03-04
  • 打赏
  • 举报
回复
去找找fin和cin具体是怎么实现的,然后就清楚问题所在了。我想应该是它们所定的浮点数的有效位不一样,所以才会这样,记得cin不是可以设置域宽吗,你试试设置为21会是什么样的结果。
fly_hyp 2003-03-04
  • 打赏
  • 举报
回复
高质量C++编程
zxlark 2003-03-04
  • 打赏
  • 举报
回复
浮点数的比较要用<和>一个精度范围内

可去看看,《高质量C++编程》
里面有说明

69,370

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧