首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

C++调用C语言 -1.IND有关问题

2014-01-13 
C++调用C语言 -1.#IND问题我的VC工程里面用C++调用C函数,其中调用C函数时有比较多的指针和数据参数传递,现

C++调用C语言 -1.#IND问题
我的VC工程里面用C++调用C函数,其中调用C函数时有比较多的指针和数据参数传递,现在遇到一个问题就是调试运行时一些变量结果为-1.#IND, 比如:在Calculate.c文件的Calculate()函数中有个lfResult = sqrt(lfX*lfX + lfY*lfY)这个表达式,调试的时候lfX和lfY的值都没任何问题,得到结果lfResult就是-1.#IND无效值,找了好久没找到问题原因,我怀疑是程序出现溢出问题,但是具体不知道怎么造成的,不知道论坛里面有人遇到过这样的问题没有?求指教啊...
[解决办法]
lfResult 这个变量是什么类型,估计超过这个类型所能表示的最大值了
代码贴出来看看
[解决办法]
调试一下就知道,打条件断点,看看是不是负数或者超限了。
[解决办法]
分步看看:

lfTemp = lfX * lfX + lfY * lfY;
lfResult = sqrt(lfTemp);

单步看看lfTemp的值
[解决办法]
sqrt 函数的计算过程,产生了 0/0, ∞ *∞ 等,不能得到确切数值的计算过程。
[解决办法]
引用:
Quote: 引用:

分步看看:
lfTemp = lfX * lfX + lfY * lfY;
lfResult = sqrt(lfTemp);

单步看看lfTemp的值

分步引用一样的,奇怪的是
lfTemp = lfX * lfX + lfY * lfY;
lfResult = sqrt(lfTemp);
lfTemp = lfX * lfX + lfY * lfY;
lfResult = sqrt(lfTemp);

我如果这样写第一个lfResult的值为-1.#IND000,第二个lfResult就正确了,或者我在出错的代码前面随便加一个什么表达式,错误就转移到前面去了,好像在那一步就会出错一样..


奇怪了,直接看比如sqrt(2000.0)的值呢?
[解决办法]
double sqrt( double x );

lfResult = (float)sqrt((double)lfX*(double)lfX + (double)lfY*(double)lfY)

热点排行