只是想知道,有可能在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。
答案 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.这就是-25
是Complex.Sqrt(Complex)
的有效参数的方式。)
答案 2 :(得分:1)
double
(或int
,long
,short
或任何其他内置数字类型)不是为支持非实数而构建的。存在 构建的库以支持任何复杂的数字,但是为了交换增加的功能,它们消耗更多的空间并且对它们的操作要慢得多。由于该领域的大部分需要对实数进行计算,因此将这些成本添加到这些最基本的数字类型是不合理的。
答案 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
添加到输出中?