负数的平方根

时间:2013-09-20 18:14:22

标签: c# square-root

只是想知道,有可能在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,它会给出NaN而不是5i。

6 个答案:

答案 0 :(得分: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

答案 1 :(得分:7)

有一个Complex结构可以满足您的需求:

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

(从大多数数字类型(包括int)到Complex的隐式转换。它的工作方式可能是您想要的:数字被视为真实部分,虚部是0.这就是-25Complex.Sqrt(Complex)的有效参数的方式。)

答案 2 :(得分:1)

double(或intlongshort或任何其他内置数字类型)不是为支持非实数而构建的。存在 构建的库以支持任何复杂的数字,但是为了交换增加的功能,它们消耗更多的空间并且对它们的操作要慢得多。由于该领域的大部分需要对实数进行计算,因此将这些成本添加到这些最基本的数字类型是不合理的。

答案 3 :(得分:1)

这是因为负数的平方根产生了复数。在更基础和一般的数学中,假定平方根仅适用于正数。取数字绝对值的平方根或使用Complex数据类型及其平方根函数。你的决定取决于你的目标。

答案 4 :(得分:1)

或者你可以这样做

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

然后您可以在每次需要root时使用此功能而不必担心

这应该比复合物重得多,你可以很好地控制它。

答案 5 :(得分:0)

为什么不先检查是否为负,如果是,则乘以(-1)并将i添加到输出中?