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,它会给出 NaN 而不是 5i。

4

6 回答 6

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 回答
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 回答
1

double(或int, long, short, 或任何其他内置数字类型)不是为支持非实数而构建的。现有的库为支持任何复数而构建的,但作为附加功能的交换,它们会消耗更多空间并且对它们的操作要慢得多。由于很多领域都需要计算实数,因此将这些成本添加到这些最基本的数字类型是不合理的。

于 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;
}

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

这应该比 Complex 轻得多,并且您可以很好地控制它。

于 2014-12-20T06:23:01.280 回答
0

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

于 2013-09-20T18:15:50.597 回答