我正在运行此代码来计算x[i][j] - y[j]
的平方根,但它让我胡说八道!
bool X[I][J]={}; //nodes
bool Y[J]={}; //medians
double denominator=0;
double miu=0;
outFile<< "denominator= " << denominator << endl;
for(i=0;i<I;i++)
for(j=0;j<J;j++)
{
denominator+=sqrt(double (X[i][j]-Y[j]));
}
outFile<< "denominator= " << denominator << endl;
第一个outFile
打印0是原始值,但第二个打印-1.#IND
。
答案 0 :(得分:2)
这可能意味着在某些时候X[i][j] - Y[j]
是否定的,而你从sqrt
获得了NaN(不是数字)。
有关NaN的说明,请参阅this wikipedia page。
此外,X
和Y
是布尔数组,因此X[i][j] - Y[j]
将始终为1,0或-1,您实际上不需要{{1} }。这是你想要的吗?
答案 1 :(得分:0)
问题在于你不能取负数的平方根 - 你得到一个虚数。只需使用abs
首先检索差异的绝对值:
bool X[I][J] = {}; // nodes
bool Y[J] = {}; // medians
double denominator = 0;
double miu = 0;
outFile << "denominator= " << denominator << endl;
for(i = 0; i < I; i++)
for(j = 0; j < J; j++)
{
denominator += sqrt(double (abs(X[i][j]-Y[j])));
}
outFile << "denominator= " << denominator << endl;
答案 2 :(得分:0)
看起来你可能正在采用负数的平方根 - 导致你看到的值,这实际上意味着“不是数字”
答案 3 :(得分:0)
由于X和Y都是bool,因此传递给sqrt()的参数有可能是负数。
答案 4 :(得分:0)
我得到的结果不一样,两者都得零。
两个数组的初始值设定项都应将所有值设置为零,因此减法的平方根也应为零。它们是布尔数组的事实应该无关紧要,因为这些值将被上升到0.0。
有些东西告诉我你发布的代码不是导致错误的实际代码。