| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3455 人关注过本帖, 1 人收藏
标题:简单浮点运算的问题
只看楼主 加入收藏
liurhhh
Rank: 2
等 级:论坛游民
帖 子:12
专家分:10
注 册:2018-4-11
结帖率:0
收藏(1)
已结贴  问题点数:10 回复次数:5 
简单浮点运算的问题
题目:输入只有一行,为三个用空格分隔的浮点数a,b,c(0<a,b,c<100)
输出也只有一行,如果 a - b 等于c ,则输出yes,否则输出no。

#include <stdio.h>
int main()
{
    double a,b,c,d;
    scanf("%lf %lf %lf",&a,&b,&c);
    d=a-b;
    if(d==c)
    printf("yes");
    else
    printf("no");
    return 0;
}

当输入5.4 3.4 2的时候,给出“no”,这是为什么啊?
搜索更多相关主题的帖子: 浮点 运算 一行 输出 printf 
2018-04-11 18:56
童生
Rank: 6Rank: 6
等 级:侠之大者
威 望:8
帖 子:205
专家分:455
注 册:2018-3-7
收藏
得分:3 
#include <math.h>
#include <float.h>


    if(fabs(d-c) < FLT_EPSILON)
收到的鲜花
  • 九转星河2018-04-11 19:35 送鲜花  1朵   附言:标记一下~
2018-04-11 19:33
李晨经纪人
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:6
帖 子:175
专家分:848
注 册:2018-2-14
收藏
得分:3 
因为浮点型数据存在精度问题。你这里的5.4 和3.4的小数部分为0110011001100110011....无限循环的,所以有误差。如果你是1.5  2.5  1.375这种的能精确表示的就可以正常得到yes。
你可以设一个误差范围像楼上那么正规或者就 if(fabs(d-c) < 1e-7)(float一般精度到小数点后7位,double到小数点后15-16位)
2018-04-11 21:35
nosnoy
Rank: 9Rank: 9Rank: 9
来 自:mcu
等 级:贵宾
威 望:14
帖 子:541
专家分:1178
注 册:2016-9-17
收藏
得分:3 
http://

穷举是最暴力的美学
2018-04-11 21:48
ZZCaleb
Rank: 1
等 级:新手上路
帖 子:5
专家分:3
注 册:2018-4-12
收藏
得分:3 
scanf("%lf%lf%lf",......)  %lf中间不能有空格
2018-04-12 09:32
ZZCaleb
Rank: 1
等 级:新手上路
帖 子:5
专家分:3
注 册:2018-4-12
收藏
得分:0 
scanf("%lf%lf%lf",......)  %lf中间不能有空格
2018-04-12 09:32
快速回复:简单浮点运算的问题
数据加载中...
 
   



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

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