0

我正在运行这段代码来计算平方根,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.

4

5 回答 5

2

这可能意味着在某些时候X[i][j] - Y[j]是负数,并且您从sqrt.

有关 NaN 的说明,请参阅此维基百科页面

此外,XandY是布尔数组,所以X[i][j] - Y[j]总是 1、0 或 -1,你真的不需要sqrt. 这是你想要的吗?

于 2012-02-27T04:09:13.247 回答
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;
于 2012-02-27T04:07:53.467 回答
0

看起来您可能正在取负数的平方根 - 导致您看到的值本质上意味着“不是数字”

于 2012-02-27T04:09:56.867 回答
0

由于 X 和 Y 都是布尔型,因此传递给 sqrt() 的参数有可能为负数。

于 2012-02-27T04:12:01.313 回答
0

我得到的结果与你不同,两者都为零。

http://ideone.com/25ZPf

两个数组的初始值设定项都应将所有值设置为零,因此减法的平方根也应为零。它们是布尔数组这一事实并不重要,因为这些值将被向上转换为 0.0。

有些东西告诉我您发布的代码不是导致错误的实际代码。

于 2012-02-27T04:29:38.663 回答