Radice quadrata di numeri negativi

Mi chiedo solo, è ansible calcolare le radici quadrate dei numeri negativi in ​​C #? Ad esempio sqrt (-1) = i.

Ho scritto questo pezzo di codice:

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(); } } 

Se inserisco 25, dà 5. Tuttavia, se inserisco -5, dà NaN invece di 5i.

C’è una struttura Complex che dovrebbe fare ciò di cui hai bisogno:

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

(Esiste una conversione implicita dalla maggior parte dei tipi di numeri, incluso int , a Complex . Funziona come probabilmente ti aspetteresti: il numero è preso come la parte reale e la parte immaginaria è 0. Ecco come -25 è un parametro valido a Complex.Sqrt(Complex) .)

Utilizzare la struttura complessa implementata di 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 (o int , long , short o qualsiasi altro tipo numerico incorporato) non è costruito per supportare numeri non reali. Esistono librerie che sono costruite per supportare qualsiasi numero complesso, ma in cambio di tale funzionalità aggiunta occupano più spazio e le operazioni su di esse sono molto più lente. Poiché gran parte del campo ha una richiesta di calcoli su numeri reali, non è ragionevole aggiungere questi costi a questi tipi numerici di base.

Questo perché le radici quadrate di numeri negativi producono numeri complessi. In matematica più di base e generale si presume che la radice quadrata si applichi solo ai numeri positivi. Prendi la radice quadrata del valore assoluto dei tuoi numeri o usa il tipo di dati Complex e la sua funzione di radice quadrata. Ciò che decidi dipende da cosa miri a raggiungere.

o potresti semplicemente farlo

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

allora puoi usare questa funzione ogni volta che devi sradicare senza avere paura

questo dovrebbe essere molto meno pesante del Complesso e tu hai un buon controllo su di esso.

Perché non controllare prima se negativo, e se lo è, moltiplicare per (-1) e aggiungere i all’output?