1

我的目标是打印***平方根是否为负。但我想不出一种将默认nan文本更改为的方法***

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

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

4

4 回答 4

8

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

for (int i = x1; i <= x2; ++i)
{
    double x = pow(i, 2) + 3*i - 500;
    if (x < 0)
    {
        outFile << "***";
    }
    else
    {
        outFile << sqrt(x);
    }
}
于 2012-01-29T12:15:55.410 回答
3

在 C++ 中测试 NaN 很棘手。只需使用一个if语句来避免评估sqrtif 它的论点是否定的。

于 2012-01-29T12:14:21.940 回答
2

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

于 2012-01-29T12:13:59.380 回答
0

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

平方根永远不会是负数。但这可能很复杂。见https://en.wikipedia.org/wiki/Complex_number

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

sqrt(ab) = 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;
    }
}
于 2012-02-06T12:55:45.280 回答