c++负平方根

c++ negative square root

本文关键字:平方根 c++      更新时间:2023-10-16

我的目标是在平方根为负数的情况下打印***。但我想不出将默认的nan文本更改为*** 的方法

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

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

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

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

在C++中测试NaN很棘手。如果sqrt的参数为负数,只需使用if语句即可避免对其求值。

一个nan数不等于任何东西,甚至不等于它自己
你可以简单地测试一下if( y != y )

如果平方根为负数,我的目标是打印*。但我想不出将默认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;
    }
}