C ++中的sqrt函数

时间:2012-02-27 04:03:24

标签: c++ sqrt

我正在运行此代码来计算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

5 个答案:

答案 0 :(得分:2)

这可能意味着在某些时候X[i][j] - Y[j]是否定的,而你从sqrt获得了NaN(不是数字)。

有关NaN的说明,请参阅this wikipedia page

此外,XY是布尔数组,因此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)

我得到的结果不一样,两者都得零。

http://ideone.com/25ZPf

两个数组的初始值设定项都应将所有值设置为零,因此减法的平方根也应为零。它们是布尔数组的事实应该无关紧要,因为这些值将被上升到0.0。

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