-3

なぜ出力は-3を期待して、3を与えています。cでそのような前処理を処理する方法は?

#include<stdio.h>
#include<math.h>
#define sq(x) ((x<0)?sqrt(-x):sqrt(x))

int main()
{
    int x;
    x=sq(-9);
    printf("%d\n",x);
    return 0;
}
4

5 に答える 5

4

なぜなら、#define "sq"は負の数かどうかをチェックし、平方根を計算する前に正の数に変換するからです。

sqrt(-(-9))であるsqrt(-x)を実行します(負の負数を取ることは正の数です)

したがって、sqrt(9)を実行します

于 2012-01-27T18:34:45.583 に答える
1

待って、待って、待って。

ここで数学の基本的なルールを破ろうとしていますか?

-9の平方根は3iです。

これは、(-3)^2が9であるためです。負の数には「虚数」の平方根があります。sqrt(-1)はiです。-1ではありません。(-1)^2は1です。

于 2012-01-27T18:38:30.603 に答える
1

あなたはこれを定義しています:

define sq(x)  ((x<0)?sqrt(-x):sqrt(x))

-9を渡しているx<0ので、trueなので、sqrt(9)3を実行しています。

次に、3を印刷します。

于 2012-01-27T18:35:24.567 に答える
1

コードは、言われていることを正確に実行していると思います。

sq(x)最初にテストx < 0します-あなたの場合、これは本当なので、sq(x)呼び出しますsqrt(-(-9))-これは3です。

試みられた解決策は(x < 0) ? -sqrt(-x) : sqrt(x)、であり、これは負の根を返しxます(あなたの意図の私の最良の解釈)。

于 2012-01-27T18:35:25.037 に答える
0

あなたが期待するなら-3、あなたはおそらく意味しました

#define sq(x)  ((x<0)?-sqrt(-x):sqrt(x))

しかし、なぜあなたは負の数の負の平方根が私を超えていると期待するのでしょうか。

于 2012-01-27T18:37:49.177 に答える