两个double类型的除法,结果为什么会这样?

loafersky 2010-04-29 10:59:29
double i = 12.0;
double j = 5.0;
double h = i / j;


上面的h计算出来是2.3999999..?为什么不是2.400000..?麻烦各位高手讲解一下,最好可以说出解决的办法,谢谢!
...全文
1582 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
kingteng 2010-04-29
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 loafersky 的回复:]

呵呵,我只是想看看各位高手对于这个问题有没有比较好的解决办法,因为之后要用这个h值去计算其他的参数,这样的话就会产生更大的误差!
[/Quote]那样的话就要设计你的算法,尽量避免产生大数吃掉小数这样的误差
loafersky 2010-04-29
  • 打赏
  • 举报
回复
呵呵,我只是想看看各位高手对于这个问题有没有比较好的解决办法,因为之后要用这个h值去计算其他的参数,这样的话就会产生更大的误差!
kingteng 2010-04-29
  • 打赏
  • 举报
回复
楼主稳住,不必计较
tonyzjg 2010-04-29
  • 打赏
  • 举报
回复
正常现象,不必惊慌
z569362161 2010-04-29
  • 打赏
  • 举报
回复
NETBEANS
loafersky 2010-04-29
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 z569362161 的回复:]
C/C++ code
#include <stdio.h>

int main(int argc, char *argv[])
{
double i = 12.0;
double j = 5.0;
double h = i/j;
printf("%lf\n",h);
return 0;
}


输出2.400000。
你……
[/Quote]

我的是VS2005啊,你用什么编译器啊?
z569362161 2010-04-29
  • 打赏
  • 举报
回复
#include <stdio.h>

int main(int argc, char *argv[])
{
double i = 12.0;
double j = 5.0;
double h = i/j;
printf("%lf\n",h);
return 0;
}


输出2.400000。
你的是什么编译器啊?
lbh2001 2010-04-29
  • 打赏
  • 举报
回复
浮点数在计算机中的表示是有误差的,浮点数也是有有效位数的
huanmie_09 2010-04-29
  • 打赏
  • 举报
回复
浮点数精度误差.
xiuxianshen 2010-04-29
  • 打赏
  • 举报
回复
其实是2.4,不过是编译器显示精度的问题而已,不必太关心这个
loafersky 2010-04-29
  • 打赏
  • 举报
回复
嗯 谢谢各位了!

69,382

社区成员

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

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