鱼C论坛

 找回密码
 立即注册
查看: 2451|回复: 8

做一道ACM题目碰到的一个小问题,来几位朋友帮帮忙·

[复制链接]
发表于 2014-4-13 10:19:40 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
以下是有问题的程序代码,输入N为1,M为5,X为10,Y为15,Z为20,单步运行时,当i加到5时,while(  (i*Z-a)!=(M*X+i*X) ) 中
左右应该是相等的,单步运行到这里时,左值是100.000,右值也是100.000,按照道理应该跳出循环了,但是单步时,还是跳进了while循环,这是怎么回事啊。
——————————————————————————————————————————————————————————————
#include <iostream>
using namespace std;
int main()
{
        int N;
        cin >> N;
        while(N--)
        {
                float M,X,Y,Z,a,i,sum=0;
                cin >>M;
                cin >>X;
                cin >>Y;
                cin >>Z;
               
                i=0;
                a=0;
               
                while(  (i*Z-a)!=(M*X+i*X) )
                {
                        i=i+0.2;
                }
        }
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-4-13 10:30:17 | 显示全部楼层
浮点数用做判断语句,很难用。当一个整数转换为一个浮点时已经存在四舍五入了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-4-13 11:48:52 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-4-13 17:19:57 | 显示全部楼层
本帖最后由 oggplay 于 2014-4-13 17:23 编辑
奔跑的鸭蛋 发表于 2014-4-13 11:48
那就没有解决的办法了吗~~

由于浮点数计算可能有误差,所以比较的时候应该判断两个数之差小于某个很小的数就应该认为相等,如
if(fabs(a,b)<0.00001)
  // equal!

直接==是完全精确匹配,往往会因为计算结果有误差造成比较失败

#define EPSILON 0.000001 //根据精度需要


if ( fabs( fa - fb) < EPSILON ){printf("fa<fb\n");}

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-4-13 17:30:30 | 显示全部楼层
oggplay 发表于 2014-4-13 17:19
由于浮点数计算可能有误差,所以比较的时候应该判断两个数之差小于某个很小的数就应该认为相等,如
if(f ...

恩,谢谢~我看看去~~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-4-14 09:48:12 | 显示全部楼层
首先要理解,浮点数不能精确存储数据,所以程序员一般都不用浮点数进行判断,因为这是伤脑筋的问题,如果你真想要浮点数进行判断,那你可以先去看一下浮点数在内存中是如何存储的,然后你再看看,或许你就会知道了,其实按照你的问题,你直接在第二个while循环内,让i=5,这样就搞定了,没必要那么麻烦,也许你是想实现一下,但是有时候有些问题你可以先试着上网找一下答案,实在不行了,你再问问大家,这是一种学习的方法和态度,还有告诉你一句,真正的程序员,真正的高手,就是要学会自己寻找问题并解决问题。希望对你有帮助……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-4-14 10:15:38 | 显示全部楼层
CL0419 发表于 2014-4-14 09:48
首先要理解,浮点数不能精确存储数据,所以程序员一般都不用浮点数进行判断,因为这是伤脑筋的问题,如果你 ...

谢谢这位朋友的指点,这道问题我之前我也估计是浮点精确性的问题,只是不确定,网上查的也不具体,所以来论坛寻求帮助~因为我也不太喜欢问别人,能自己解决尽量自己解决~但是有的时候实在没办法,呵呵,这道题目我的算法不是很好,正在改进,呵呵,谢谢~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-4-14 10:39:49 | 显示全部楼层
学习了。。。。。。。。。。。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-4-14 12:39:16 | 显示全部楼层
过来学习学习!,,,,,,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-26 00:10

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表