c ++负平方根

时间:2012-01-29 12:11:33

标签: c++ for-loop sqrt

如果平方根为负,我的目标是打印***。但我想不出将默认nan文字更改为***

的方法
for(int i=x1;i<=x2;i++){
   double y = sqrt(pow(i,2)+3*i-500);
    if(y = ?){
        outFile << "***";
    }

那么,我应该在if语句中写什么才能使它成为可能?或者也许有另一种方法来检查y是否为nan然后打印 *

4 个答案:

答案 0 :(得分:8)

如何检查负平面输入到平方根函数?

for (int i = x1; i <= x2; ++i)
{
    double x = pow(i, 2) + 3*i - 500;
    if (x < 0)
    {
        outFile << "***";
    }
    else
    {
        outFile << sqrt(x);
    }
}

答案 1 :(得分:3)

在C ++中测试NaN是tricky。只需使用if语句即可避免评估sqrt其参数是否为负数。

答案 2 :(得分:2)

一个纳数不等于任何东西,即使对自己也是如此 您可以进行简单的测试,看看是否if( y != y )

答案 3 :(得分:0)

  

如果平方根为负,我的目标是打印 *。但我想不出将默认的nan文本更改为*

的方法

平方根永远不会消极。但它可能很复杂。见https://en.wikipedia.org/wiki/Complex_number

我们的想法是将数字集扩展到所谓的复平面,其中包含一个特殊数字 i ,其定义为i²= -1 即可。这允许我们概括平方根:

sqrt(a b)= sqrt(a)sqrt(b)

所以我们可以将sqrt(-a)分解为 sqrt(-1)sqrt(a)= i sqrt(a)

这允许我们将您的程序更改为

for(int i=x1;i<=x2;i++){
    double X = pow(i,2)+3*i-500;
    double y = sqrt(abs(x));
    if(X < 0){
        outFile << y << "i";
    } else {
        outFile << y;
    }
}