负数的平方根
本文关键字:平方根 | 更新日期: 2023-09-27 18:32:14
只是想知道,是否可以在 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。
有一个Complex
结构应该可以满足您的需求:
Complex c = Complex.Sqrt(-25); // has a value of approximately 0 + 5i
(从大多数数字类型(包括 int
)到 Complex
都有隐式转换。它的工作方式可能如您所期望的那样:数字被视为实部,虚部为 0。这就是-25
如何成为要Complex.Sqrt(Complex)
的有效参数。
使用实现的 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
double
(或int
、long
、short
或任何其他内置数字类型)不是为支持非实数而构建的。 现有的库是为了支持任何复数而构建的,但是作为附加功能的交换,它们会消耗更多的空间,并且对它们的操作要慢得多。 由于该领域的大部分内容都需要对实数进行计算,因此将这些成本添加到这些最基本的数字类型中是不合理的。
这是因为负数的平方根会产生复数。在更基本和一般的数学中,平方根被认为仅适用于正数。要么取数字绝对值的平方根,要么使用 Complex
数据类型及其平方根函数。你决定什么取决于你的目标是实现什么。
或者你可以简单地这样做
public static float Root(float value)
{
int negative = 1;
if(value < 0)
negative = -1;
return Math.Sqrt(Math.Abs(value)) * negative;
}
然后,每次需要root时都可以使用此功能而不必担心
这应该比复杂要轻得多,并且您可以很好地控制它。
为什么不先检查是否为负数,如果是,则乘以 (-1) 并将 i
添加到输出中?