3

C# で負の数の平方根を計算することは可能ですか? たとえば、sqrt(-1) = i.

私はこのコードを書きました:

using System;

public static class sqrts
{
    public static void Main()
    {
        string x;
        double sqrtofx;

        Console.Write("Enter a number: ");
        x = Console.ReadLine();

        sqrtofx = Math.Sqrt(Convert.ToInt32(x));

        Console.WriteLine("\nSqrt({0}): {1}", x, sqrtofx);

        Console.ReadKey();
    }
}

25 を入力すると 5 が返されます。ただし、-5 を入力すると、5i ではなく NaN が返されます。

4

6 に答える 6

8

実装された C# の複雑な構造を使用します: http://msdn.microsoft.com/en-us/library/system.numerics.complex.aspx

Complex c = new Complex(-1,0);
Complex result = Complex.Sqrt(c);

http://msdn.microsoft.com/en-us/library/system.numerics.complex.sqrt.aspx

于 2013-09-20T18:18:25.410 に答える
8

Complex必要なことを行う構造体があります。

Complex c = Complex.Sqrt(-25); // has a value of approximately 0 + 5i

int( 、を含むほとんどの数値型から への暗黙的な変換がありComplexます。これはおそらく予想どおりに機能します。数値は実部として取得され、虚部は 0 です。これが-25への有効なパラメーターですComplex.Sqrt(Complex)。)

于 2013-09-20T18:16:37.783 に答える
1

double(またはintlongshortまたはその他の組み込み数値型) は、非実数をサポートするように構築されていません。任意の複素数をサポートするように構築されたライブラリが存在しますが、その追加機能と引き換えに、それらはより多くのスペースを消費し、それらの操作ははるかに遅くなります。多くの分野で実数の計算が要求されるため、これらのコストをこれらの最も基本的な数値型に追加することは合理的ではありません。

于 2013-09-20T18:17:06.570 に答える
1

これは、負の数の平方根が複素数を生成するためです。より基本的で一般的な数学では、平方根は正の数にのみ適用されると想定されています。数値の絶対値の平方根を取るか、Complexデータ型とその平方根関数を使用します。何を決定するかは、何を達成しようとしているかによって異なります。

于 2013-09-20T18:18:09.083 に答える
1

または、単にそれを行うことができます

public static float Root(float value)
{
    int negative = 1;
    if(value < 0)
        negative = -1;
    return Math.Sqrt(Math.Abs(value)) * negative;
}

その後、恐れずにルート化する必要があるたびにこの機能を使用できます

これは、Complex よりもはるかに軽く、適切に制御できます。

于 2014-12-20T06:23:01.280 に答える