对了,对于浮点数的比较判断,尤其是等于的判断,只写==是很容易出错的,你最好写成这样的
if(abs(t-b)<0.00005)//这表示两者基本相等了。
这是由于浮点数运算的不准确性和存储方式造成的。
if(abs(t-b)<0.00005)//这表示两者基本相等了。
这是由于浮点数运算的不准确性和存储方式造成的。
解决方案 »
- 如何动态的创建CBUTTON对象.
- 在线等答案!Windows窗口右上方的关闭按钮所映射的函数是哪个?我要对它进行重载!
- 如何将分割控件设置得比较细或者根本看不见
- 数据库的一个连接,多个记录集更新问题
- 关于如何了得其他程序中listbox(vb开发的)数据?
- 我自己模仿寫了個APIHOOK的類,但在實際使用時有些問題一直難解決,誰對WINDOWS,及其MASM32(FOR WINDOW)熟呀,我把Source Code都貼在這兒了,
- 在sdk中怎样得到一个按钮?
- 如何将注册表的键值(包含子键值)用程序(最好是win32API函数)一下删除。谢谢
- 有没有办法将FLASH文件转化为。DAT或。AVI或者。MPG格式???
- 添加成员函数?
- 请教各位高手!!!!
- 求救!!!关于ListControl不能显示数据的问题!!(也许是送分)
if(t-b<10E-n)(n为整数)
{...................}
保你不会出问题
if(t<b||t==b||t-b<minvalue)
这个判断的实质就是通过减少精确度(t不比b大minvalue,就认为t和b相等),来解决浮点数不能判断相等的问题。
float t,b;
if (t < b)
{....}orif (t < b + e)
{....}
其中e是容许误差在你提供的例子里,实际的t一定略小于b.
float a,t;
a=1.1;
t=1.1;
if(t<=a)AfxMessageBox("equal");
你说的这种情况当然能进去了,赋值都一样,在内存里面a和t一模一样,谁敢说它们不等。
只是如果是通过计算得出的值,哪怕小数点后面十几位差了那么一丁点,也就不等了。没见到哪本书上说"=="不能用于浮点数比较的,只是由于浮点数本身的限制,要两个浮点数相等实在很难。所以通常在涉及到浮点数的计算时,都只是提出精确到10e-n这样的要求。
if((fabs(t-b)<10e-10)这样写就差不多了。——还真没有见过其它方法。
char * pEnd = ...;while( true )
{
if( pStart >= pEnd ) // 这里会出问题
...
}我跟踪到 diasssembler window, 发现是 VC 生成的代码不对,是 jbe/jb 的问题,具体我记不清了。把 if( pStart >= pEnd ) 改成 if( (pStart > pEnd) || (pStart == pEnd) ) 后就没问题了。VC 的这bug可能在满足某种条件时会发生,比如在 while 循环中的 if 中。我用的是 vc6 + sp4