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ステートメントを使用してsqrt、引数が負の場合の評価を回避します。

于 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² = -1と定義された特別な数iを含む、いわゆる複素平面に展開することです。これにより、平方根を一般化できます。

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 に答える