100分求助:VC6下两个double相减得出-1.#IND000000000原因分析

GreenIce0229 2010-04-21 11:50:05
100分求助:VC6下两个double相减得出-1.#IND000000000原因分析

int nNum = 60;
double dBeginTime = m_pCurImageList->m_dBeginTime;//m_pCurImageList->m_dBeginTime==1271819811.9210
//执行通过

double dEndTime = m_pCurImageList->m_dEndTime;//m_pCurImageList->m_dEndTime==1271819814.3280;
//执行通过

double dSpanTime = (dEndTime - dBeginTime) / nNum;
//执行结果错误,debug发现dSpanTime == -1.#IND000000000

time_t nSumTime = (time_t)((dEndTime - dBeginTime) * 1000.0);
//执行结果发现nSumTime == 0;

请帮助分析引起该情况的各种可能原因。多谢

另注:这段代码是在一个单独的线程中执行,当该线程调用某一个静态Lib中的Function时必定出现这种情况,而在调用其它静态Lib中的Function中却其它正常,始终不会出现这种情况。
...全文
268 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
GreenIce0229 2010-04-22
  • 打赏
  • 举报
回复
问题已解决。

感谢各位热心帮助。

问题的确在这个Lib里面使用了汇编,修改了寄存器状态所致

再次感谢
jxufeng 2010-04-22
  • 打赏
  • 举报
回复
试一试
double dSpanTime = (dEndTime - dBeginTime);多少?
double a=dSpanTime /60.0; 多少?
GreenIce0229 2010-04-21
  • 打赏
  • 举报
回复
同样感谢各位的回复
GreenIce0229 2010-04-21
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 zyq5945 的回复:]
double dBeginTime = m_pCurImageList->m_dBeginTime;//m_pCurImageList->m_dBeginTime==1271819811.9210
--》
double dBeginTime = 1271819811.9210;
自己换成直接赋值看会怎么样。
[/Quote]

曾做过这样的实验,
double dBeginTime = 1271819811.9210
//执行通过
double dEndTime = 1271819814.3280;
//执行通过

但是到了double dSpanTime = (dEndTime - dBeginTime) / nNum;
仍然出现同样的错误

郁闷。而且只有在线程调用这个特定的Lib中的函数时才会出现
zyq5945 2010-04-21
  • 打赏
  • 举报
回复
double dBeginTime = m_pCurImageList->m_dBeginTime;//m_pCurImageList->m_dBeginTime==1271819811.9210
--》
double dBeginTime = 1271819811.9210;
自己换成直接赋值看会怎么样。
GreenIce0229 2010-04-21
  • 打赏
  • 举报
回复
谢谢回复。


[Quote=引用 1 楼 visualeleven 的回复:]
m_pCurImageList是个什么?MFC的类?是线程的参数???
[/Quote]

m_pCurImageList是一个自己定义的类,里面包含一个List和两个double标识起始、终止时间

[Quote=引用 2 楼 zyq5945 的回复:]
ouble dSpanTime = (dEndTime - dBeginTime) / nNum;
--》
ouble dSpanTime = (dEndTime - dBeginTime) / (double)nNum;
[/Quote]

试验过,没作用,同样-1.#IND000000000
zyq5945 2010-04-21
  • 打赏
  • 举报
回复
double dSpanTime = (dEndTime - dBeginTime) / nNum;
--》
double dSpanTime = (dEndTime - dBeginTime) / (double)nNum; //或者nNum直接定义成double,有时候按默认转换是会有问题的。
zyq5945 2010-04-21
  • 打赏
  • 举报
回复
ouble dSpanTime = (dEndTime - dBeginTime) / nNum;
--》
ouble dSpanTime = (dEndTime - dBeginTime) / (double)nNum;
Eleven 2010-04-21
  • 打赏
  • 举报
回复
m_pCurImageList是个什么?MFC的类?是线程的参数???
zhou1xp 2010-04-21
  • 打赏
  • 举报
回复
有没有可能数字大小超过了你的使用范围,楼主自己查下范围看看
klkvc386 2010-04-21
  • 打赏
  • 举报
回复
int nNum=60;
double dBeginTime = 1271819811.9210;
double dEndTime = 1271819814.3280;
double dSpanTime = (double)(dEndTime - dBeginTime) / (double)nNum;
CString str;
str.Format("%f",dSpanTime);
MessageBox(str);
//0.040117

没有问题啊,会不会是 nNum 改变了, 或 "%f" 的问题
还是其他???
liumenghappy 2010-04-21
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 r3000 的回复:]

代码无问题的,别的地方出错了。
[/Quote]
up
用户 昵称 2010-04-21
  • 打赏
  • 举报
回复
这个数表示无穷大,所以肯定有些代码,比如除法的参数不符合要求了。
liruda 2010-04-21
  • 打赏
  • 举报
回复
在double dSpanTime = (dEndTime - dBeginTime) / nNum; 之后
把dEndTime 和 dBeginTime 打印出来看看.
zyq5945 2010-04-21
  • 打赏
  • 举报
回复
前几天也见过同样的一个怪现象,前面传了个CStringArray变量到DLL中,在下面用for语句,判断的时候居然变成赋值了,没办法只能改成while,CStringArray销毁的时候居然还报堆栈被破坏了。
GreenIce0229 2010-04-21
  • 打赏
  • 举报
回复
单步调试也是这样。

我曾经怀疑是不是调用的Lib中存在某些问题引起。因为同一份代码,调用别的库里面的函数就不从来没有出现过这种现象
liruda 2010-04-21
  • 打赏
  • 举报
回复
单步调试, 看看Watch里面内存的内容
康斯坦汀 2010-04-21
  • 打赏
  • 举报
回复
代码无问题的,别的地方出错了。

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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