小问下!

风尘雨路 2005-12-22 04:21:13
1. 以下代码是否有问题,如果有请说明:
double firstLength;
double totalLength;
…… // 相关处理
if (firstLength == totalLength)
{
// doSomething
}
...全文
88 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
g20044111 2005-12-22
  • 打赏
  • 举报
回复
HOHO```
不错的问题,UP!!!!!!!!!!
iamcaicainiao 2005-12-22
  • 打赏
  • 举报
回复
4.3.3 浮点变量与零值比较
 【规则4-3-3】不可将浮点变量用“==”或“!=”与任何数字比较。
千万要留意,无论是float还是double类型的变量,都有精度限制。所以一定要避免将浮点变量用“==”或“!=”与数字比较,应该设法转化成“>=”或“<=”形式。
假设浮点变量的名字为x,应当将
if (x == 0.0) // 隐含错误的比较
转化为
if ((x>=-EPSINON) && (x<=EPSINON))
其中EPSINON是允许的误差(即精度)。


请写出 float x 与“零值”比较的 if 语句:

If ((x>0.000001)|| (x<-0.0000001))


因此,搂住的自然是由问题的了哦
屋顶上的老猫 2005-12-22
  • 打赏
  • 举报
回复
对于浮点数的大小比较问题,下面是比较的程序代码:
bool IsEqual(float f1, float f2, int absDelta)
{
int i1, i2;
i1 = ( f1>0) ? ((int&)f1) : ( (int&) f1 - 0x80000000 );
i2 = (f2>0) ? ((int&)f2) : ( (int&) f2 - 0x80000000 );
return ((abs(i1-i2))}

//(int &)a的意思是将a存储单元开始的内容解释为一个int引用
absDelta 两个浮点数之间允许有多少个其他可以精确表达的浮点数存在,相当于相对误差,浮点数的比较只能通过其在内存中的存储形式比较。
Rick_ang 2005-12-22
  • 打赏
  • 举报
回复
比如:
if(abs(firstLength,totalLength)<1e-6)
{
//do something
}
Rick_ang 2005-12-22
  • 打赏
  • 举报
回复
有问题,浮点数不能用==比较..用一个精度范围来确定是否相等

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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