Complex Struct
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Rappresenta un numero complesso.
public value class Complex : IEquatable<System::Numerics::Complex>, IFormattable
public value class Complex : IEquatable<System::Numerics::Complex>, IParsable<System::Numerics::Complex>, ISpanParsable<System::Numerics::Complex>, IUtf8SpanParsable<System::Numerics::Complex>, System::Numerics::IAdditionOperators<System::Numerics::Complex, System::Numerics::Complex, System::Numerics::Complex>, System::Numerics::IAdditiveIdentity<System::Numerics::Complex, System::Numerics::Complex>, System::Numerics::IDecrementOperators<System::Numerics::Complex>, System::Numerics::IDivisionOperators<System::Numerics::Complex, System::Numerics::Complex, System::Numerics::Complex>, System::Numerics::IEqualityOperators<System::Numerics::Complex, System::Numerics::Complex, bool>, System::Numerics::IIncrementOperators<System::Numerics::Complex>, System::Numerics::IMultiplicativeIdentity<System::Numerics::Complex, System::Numerics::Complex>, System::Numerics::IMultiplyOperators<System::Numerics::Complex, System::Numerics::Complex, System::Numerics::Complex>, System::Numerics::INumberBase<System::Numerics::Complex>, System::Numerics::ISignedNumber<System::Numerics::Complex>, System::Numerics::ISubtractionOperators<System::Numerics::Complex, System::Numerics::Complex, System::Numerics::Complex>, System::Numerics::IUnaryNegationOperators<System::Numerics::Complex, System::Numerics::Complex>, System::Numerics::IUnaryPlusOperators<System::Numerics::Complex, System::Numerics::Complex>
public value class Complex : IEquatable<System::Numerics::Complex>, IParsable<System::Numerics::Complex>, ISpanParsable<System::Numerics::Complex>, System::Numerics::IAdditionOperators<System::Numerics::Complex, System::Numerics::Complex, System::Numerics::Complex>, System::Numerics::IAdditiveIdentity<System::Numerics::Complex, System::Numerics::Complex>, System::Numerics::IDecrementOperators<System::Numerics::Complex>, System::Numerics::IDivisionOperators<System::Numerics::Complex, System::Numerics::Complex, System::Numerics::Complex>, System::Numerics::IEqualityOperators<System::Numerics::Complex, System::Numerics::Complex, bool>, System::Numerics::IIncrementOperators<System::Numerics::Complex>, System::Numerics::IMultiplicativeIdentity<System::Numerics::Complex, System::Numerics::Complex>, System::Numerics::IMultiplyOperators<System::Numerics::Complex, System::Numerics::Complex, System::Numerics::Complex>, System::Numerics::INumberBase<System::Numerics::Complex>, System::Numerics::ISignedNumber<System::Numerics::Complex>, System::Numerics::ISubtractionOperators<System::Numerics::Complex, System::Numerics::Complex, System::Numerics::Complex>, System::Numerics::IUnaryNegationOperators<System::Numerics::Complex, System::Numerics::Complex>, System::Numerics::IUnaryPlusOperators<System::Numerics::Complex, System::Numerics::Complex>
public struct Complex : IEquatable<System.Numerics.Complex>, IFormattable
public readonly struct Complex : IEquatable<System.Numerics.Complex>, IParsable<System.Numerics.Complex>, ISpanParsable<System.Numerics.Complex>, IUtf8SpanParsable<System.Numerics.Complex>, System.Numerics.IAdditionOperators<System.Numerics.Complex,System.Numerics.Complex,System.Numerics.Complex>, System.Numerics.IAdditiveIdentity<System.Numerics.Complex,System.Numerics.Complex>, System.Numerics.IDecrementOperators<System.Numerics.Complex>, System.Numerics.IDivisionOperators<System.Numerics.Complex,System.Numerics.Complex,System.Numerics.Complex>, System.Numerics.IEqualityOperators<System.Numerics.Complex,System.Numerics.Complex,bool>, System.Numerics.IIncrementOperators<System.Numerics.Complex>, System.Numerics.IMultiplicativeIdentity<System.Numerics.Complex,System.Numerics.Complex>, System.Numerics.IMultiplyOperators<System.Numerics.Complex,System.Numerics.Complex,System.Numerics.Complex>, System.Numerics.INumberBase<System.Numerics.Complex>, System.Numerics.ISignedNumber<System.Numerics.Complex>, System.Numerics.ISubtractionOperators<System.Numerics.Complex,System.Numerics.Complex,System.Numerics.Complex>, System.Numerics.IUnaryNegationOperators<System.Numerics.Complex,System.Numerics.Complex>, System.Numerics.IUnaryPlusOperators<System.Numerics.Complex,System.Numerics.Complex>
public readonly struct Complex : IEquatable<System.Numerics.Complex>, IFormattable
public readonly struct Complex : IEquatable<System.Numerics.Complex>, IParsable<System.Numerics.Complex>, ISpanParsable<System.Numerics.Complex>, System.Numerics.IAdditionOperators<System.Numerics.Complex,System.Numerics.Complex,System.Numerics.Complex>, System.Numerics.IAdditiveIdentity<System.Numerics.Complex,System.Numerics.Complex>, System.Numerics.IDecrementOperators<System.Numerics.Complex>, System.Numerics.IDivisionOperators<System.Numerics.Complex,System.Numerics.Complex,System.Numerics.Complex>, System.Numerics.IEqualityOperators<System.Numerics.Complex,System.Numerics.Complex,bool>, System.Numerics.IIncrementOperators<System.Numerics.Complex>, System.Numerics.IMultiplicativeIdentity<System.Numerics.Complex,System.Numerics.Complex>, System.Numerics.IMultiplyOperators<System.Numerics.Complex,System.Numerics.Complex,System.Numerics.Complex>, System.Numerics.INumberBase<System.Numerics.Complex>, System.Numerics.ISignedNumber<System.Numerics.Complex>, System.Numerics.ISubtractionOperators<System.Numerics.Complex,System.Numerics.Complex,System.Numerics.Complex>, System.Numerics.IUnaryNegationOperators<System.Numerics.Complex,System.Numerics.Complex>, System.Numerics.IUnaryPlusOperators<System.Numerics.Complex,System.Numerics.Complex>
[System.Serializable]
public struct Complex : IEquatable<System.Numerics.Complex>, IFormattable
type Complex = struct
interface IFormattable
type Complex = struct
interface IFormattable
interface IParsable<Complex>
interface ISpanFormattable
interface ISpanParsable<Complex>
interface IAdditionOperators<Complex, Complex, Complex>
interface IAdditiveIdentity<Complex, Complex>
interface IDecrementOperators<Complex>
interface IDivisionOperators<Complex, Complex, Complex>
interface IEqualityOperators<Complex, Complex, bool>
interface IIncrementOperators<Complex>
interface IMultiplicativeIdentity<Complex, Complex>
interface IMultiplyOperators<Complex, Complex, Complex>
interface INumberBase<Complex>
interface IUtf8SpanFormattable
interface IUtf8SpanParsable<Complex>
interface ISubtractionOperators<Complex, Complex, Complex>
interface IUnaryNegationOperators<Complex, Complex>
interface IUnaryPlusOperators<Complex, Complex>
interface ISignedNumber<Complex>
type Complex = struct
interface IFormattable
interface IParsable<Complex>
interface ISpanFormattable
interface ISpanParsable<Complex>
interface IUtf8SpanFormattable
interface IUtf8SpanParsable<Complex>
interface IAdditionOperators<Complex, Complex, Complex>
interface IAdditiveIdentity<Complex, Complex>
interface IDecrementOperators<Complex>
interface IDivisionOperators<Complex, Complex, Complex>
interface IEqualityOperators<Complex, Complex, bool>
interface IIncrementOperators<Complex>
interface IMultiplicativeIdentity<Complex, Complex>
interface IMultiplyOperators<Complex, Complex, Complex>
interface INumberBase<Complex>
interface ISubtractionOperators<Complex, Complex, Complex>
interface IUnaryNegationOperators<Complex, Complex>
interface IUnaryPlusOperators<Complex, Complex>
interface ISignedNumber<Complex>
type Complex = struct
interface IFormattable
interface IParsable<Complex>
interface ISpanFormattable
interface ISpanParsable<Complex>
interface IAdditionOperators<Complex, Complex, Complex>
interface IAdditiveIdentity<Complex, Complex>
interface IDecrementOperators<Complex>
interface IDivisionOperators<Complex, Complex, Complex>
interface IEqualityOperators<Complex, Complex, bool>
interface IIncrementOperators<Complex>
interface IMultiplicativeIdentity<Complex, Complex>
interface IMultiplyOperators<Complex, Complex, Complex>
interface INumberBase<Complex>
interface ISubtractionOperators<Complex, Complex, Complex>
interface IUnaryNegationOperators<Complex, Complex>
interface IUnaryPlusOperators<Complex, Complex>
interface ISignedNumber<Complex>
type Complex = struct
interface IFormattable
interface IParsable<Complex>
interface ISpanFormattable
interface ISpanParsable<Complex>
interface IAdditionOperators<Complex, Complex, Complex>
interface IAdditiveIdentity<Complex, Complex>
interface IDecrementOperators<Complex>
interface IDivisionOperators<Complex, Complex, Complex>
interface IEqualityOperators<Complex, Complex, bool>
interface IIncrementOperators<Complex>
interface IMultiplicativeIdentity<Complex, Complex>
interface IMultiplyOperators<Complex, Complex, Complex>
interface INumberBase<Complex>
interface ISubtractionOperators<Complex, Complex, Complex>
interface IUnaryNegationOperators<Complex, Complex>
interface IUnaryPlusOperators<Complex, Complex>
interface IUtf8SpanFormattable
interface IUtf8SpanParsable<Complex>
interface ISignedNumber<Complex>
[<System.Serializable>]
type Complex = struct
interface IFormattable
Public Structure Complex
Implements IEquatable(Of Complex), IFormattable
Public Structure Complex
Implements IAdditionOperators(Of Complex, Complex, Complex), IAdditiveIdentity(Of Complex, Complex), IDecrementOperators(Of Complex), IDivisionOperators(Of Complex, Complex, Complex), IEqualityOperators(Of Complex, Complex, Boolean), IEquatable(Of Complex), IIncrementOperators(Of Complex), IMultiplicativeIdentity(Of Complex, Complex), IMultiplyOperators(Of Complex, Complex, Complex), INumberBase(Of Complex), IParsable(Of Complex), ISignedNumber(Of Complex), ISpanParsable(Of Complex), ISubtractionOperators(Of Complex, Complex, Complex), IUnaryNegationOperators(Of Complex, Complex), IUnaryPlusOperators(Of Complex, Complex), IUtf8SpanParsable(Of Complex)
Public Structure Complex
Implements IAdditionOperators(Of Complex, Complex, Complex), IAdditiveIdentity(Of Complex, Complex), IDecrementOperators(Of Complex), IDivisionOperators(Of Complex, Complex, Complex), IEqualityOperators(Of Complex, Complex, Boolean), IEquatable(Of Complex), IIncrementOperators(Of Complex), IMultiplicativeIdentity(Of Complex, Complex), IMultiplyOperators(Of Complex, Complex, Complex), INumberBase(Of Complex), IParsable(Of Complex), ISignedNumber(Of Complex), ISpanParsable(Of Complex), ISubtractionOperators(Of Complex, Complex, Complex), IUnaryNegationOperators(Of Complex, Complex), IUnaryPlusOperators(Of Complex, Complex)
- Ereditarietà
- Attributi
- Implementazioni
-
IEquatable<Complex> IFormattable IEquatable<TSelf> IParsable<Complex> IParsable<TSelf> ISpanFormattable ISpanParsable<Complex> ISpanParsable<TSelf> IUtf8SpanFormattable IUtf8SpanParsable<Complex> IUtf8SpanParsable<TSelf> IAdditionOperators<Complex,Complex,Complex> IAdditionOperators<TSelf,TSelf,TSelf> IAdditiveIdentity<Complex,Complex> IAdditiveIdentity<TSelf,TSelf> IDecrementOperators<Complex> IDecrementOperators<TSelf> IDivisionOperators<Complex,Complex,Complex> IDivisionOperators<TSelf,TSelf,TSelf> IEqualityOperators<Complex,Complex,Boolean> IEqualityOperators<TSelf,TSelf,Boolean> IIncrementOperators<Complex> IIncrementOperators<TSelf> IMultiplicativeIdentity<Complex,Complex> IMultiplicativeIdentity<TSelf,TSelf> IMultiplyOperators<Complex,Complex,Complex> IMultiplyOperators<TSelf,TSelf,TSelf> INumberBase<Complex> INumberBase<TSelf> ISignedNumber<Complex> ISubtractionOperators<Complex,Complex,Complex> ISubtractionOperators<TSelf,TSelf,TSelf> IUnaryNegationOperators<Complex,Complex> IUnaryNegationOperators<TSelf,TSelf> IUnaryPlusOperators<Complex,Complex> IUnaryPlusOperators<TSelf,TSelf>
Commenti
Un numero complesso è un numero che comprende una parte numerica reale e una parte numerica immaginaria. Un numero complesso z viene in genere scritto nel formato z = x + yi, dove x e y sono numeri reali, e i è l'unità immaginaria che ha la proprietà i2 = -1. La parte reale del numero complesso è rappresentata da x e la parte immaginaria del numero complesso è rappresentata da y.
Il Complex tipo usa il sistema di coordinate cartesiano (reale, immaginario) durante l'istanziamento e la manipolazione di numeri complessi. Un numero complesso può essere rappresentato come punto in un sistema di coordinate bidimensionale, noto come piano complesso. La parte reale del numero complesso è posizionata sull'asse x (l'asse orizzontale) e la parte immaginaria è posizionata sull'asse y (asse verticale).
Qualsiasi punto nel piano complesso può essere espresso anche in base al valore assoluto, utilizzando il sistema di coordinate polari. Nelle coordinate polari, un punto è caratterizzato da due numeri:
- La sua grandezza, ovvero la distanza del punto dall'origine (ovvero, 0,0 o il punto in cui si intersecano l'asse x e l'asse y).
- La sua fase, ovvero l'angolo tra l'asse reale e la linea disegnata dall'origine al punto.
Creare un'istanza di un numero complesso
È possibile assegnare un valore a un numero complesso in uno dei modi seguenti:
Passando due Double valori al suo costruttore. Il primo valore rappresenta la parte reale del numero complesso e il secondo valore rappresenta la parte immaginaria. Questi valori rappresentano la posizione del numero complesso nel sistema di coordinate cartesiano bidimensionale.
Chiamando il metodo statico (
Sharedin Visual Basic) Complex.FromPolarCoordinates per creare un numero complesso dalle coordinate polari.Assegnando un valore Byte, SByte, Int16, UInt16, Int32, UInt32, Int64, UInt64, Single o Double a un oggetto Complex. Il valore diventa la parte reale del numero complesso e la sua parte immaginaria è uguale a 0.
Eseguendo il cast (in C#) o la conversione (in Visual Basic) di un valore Decimal o BigInteger in un oggetto Complex. Il valore diventa la parte reale del numero complesso e la sua parte immaginaria è uguale a 0.
Assegnando il numero complesso restituito da un metodo o un operatore a un Complex oggetto . Ad esempio, Complex.Add è un metodo statico che restituisce un numero complesso che corrisponde alla somma di due numeri complessi e l'operatore Complex.Addition aggiunge due numeri complessi e restituisce il risultato.
Nell'esempio seguente vengono illustrati ognuno di questi cinque modi per assegnare un valore a un numero complesso.
using System;
using System.Numerics;
public class CreateEx
{
public static void Run()
{
// Create a complex number by calling its class constructor.
Complex c1 = new Complex(12, 6);
Console.WriteLine(c1);
// Assign a Double to a complex number.
Complex c2 = 3.14;
Console.WriteLine(c2);
// Cast a Decimal to a complex number.
Complex c3 = (Complex)12.3m;
Console.WriteLine(c3);
// Assign the return value of a method to a Complex variable.
Complex c4 = Complex.Pow(Complex.One, -1);
Console.WriteLine(c4);
// Assign the value returned by an operator to a Complex variable.
Complex c5 = Complex.One + Complex.One;
Console.WriteLine(c5);
// Instantiate a complex number from its polar coordinates.
Complex c6 = Complex.FromPolarCoordinates(10, .524);
Console.WriteLine(c6);
}
}
// The example displays the following output:
// (12, 6)
// (3.14, 0)
// (12.3, 0)
// (1, 0)
// (2, 0)
// (8.65824721882145, 5.00347430269914)
Imports System.Numerics
Module Example
Public Sub Run()
' Create a complex number by calling its class constructor.
Dim c1 As New Complex(12, 6)
Console.WriteLine(c1)
' Assign a Double to a complex number.
Dim c2 As Complex = 3.14
Console.WriteLine(c2)
' Cast a Decimal to a complex number.
Dim c3 As Complex = CType(12.3d, Complex)
Console.WriteLine(c3)
' Assign the return value of a method to a Complex variable.
Dim c4 As Complex = Complex.Pow(Complex.One, -1)
Console.WriteLine(c4)
' Assign the value returned by an operator to a Complex variable.
Dim c5 As Complex = Complex.One + Complex.One
Console.WriteLine(c5)
' Instantiate a complex number from its polar coordinates.
Dim c6 As Complex = Complex.FromPolarCoordinates(10, .524)
Console.WriteLine(c6)
End Sub
End Module
' The example displays the following output:
' (12, 6)
' (3.14, 0)
' (12.3000001907349, 0)
' (1, 0)
' (2, 0)
' (8.65824721882145, 5.00347430269914)
Operazioni con numeri complessi
La Complex struttura in .NET include membri che forniscono le funzionalità seguenti:
- Metodi per confrontare due numeri complessi per determinare se sono uguali.
- Operatori per eseguire operazioni aritmetiche su numeri complessi. Complex gli operatori consentono di eseguire addizioni, sottrazione, moltiplicazione, divisione e negazione unaria con numeri complessi.
- Metodi per eseguire altre operazioni numeriche su numeri complessi. Oltre alle quattro operazioni aritmetiche di base, è possibile aumentare un numero complesso a una potenza specificata, trovare la radice quadrata di un numero complesso e ottenere il valore assoluto di un numero complesso.
- Metodi per eseguire operazioni trigonometriche su numeri complessi. Ad esempio, è possibile calcolare la tangente di un angolo rappresentato da un numero complesso.
Si noti che, poiché le Real proprietà e Imaginary sono di sola lettura, non è possibile modificare il valore di un oggetto esistente Complex . Tutti i metodi che eseguono un'operazione su un Complex numero, se il valore restituito è di tipo Complex, restituiscono un nuovo Complex numero.
Numeri complessi e di precisione
Le parti reali e immaginarie di un numero complesso sono rappresentate da due valori a virgola mobile e precisione doppia. Ciò significa che Complex valori, come i valori a virgola mobile a doppia precisione, possono perdere precisione in seguito a operazioni numeriche. Ciò significa che i confronti rigorosi per l'uguaglianza di due Complex valori possono non riuscire, anche se la differenza tra i due valori è dovuta a una perdita di precisione. Per altre informazioni, vedere Double.
Ad esempio, l'esecuzione di exponentiation sul logaritmo di un numero deve restituire il numero originale. In alcuni casi, tuttavia, la perdita di precisione dei valori a virgola mobile può causare lievi differenze tra i due valori, come illustrato nell'esempio seguente.
Complex value = new Complex(Double.MinValue / 2, Double.MinValue / 2);
Complex value2 = Complex.Exp(Complex.Log(value));
Console.WriteLine($"{value} \n{value2} \nEqual: {value == value2}");
// The example displays the following output:
// (-8.98846567431158E+307, -8.98846567431158E+307)
// (-8.98846567431161E+307, -8.98846567431161E+307)
// Equal: False
Dim value As New Complex(Double.MinValue / 2, Double.MinValue / 2)
Dim value2 As Complex = Complex.Exp(Complex.Log(value))
Console.WriteLine("{0} {3}{1} {3}Equal: {2}", value, value2,
value = value2,
vbCrLf)
' The example displays the following output:
' (-8.98846567431158E+307, -8.98846567431158E+307)
' (-8.98846567431161E+307, -8.98846567431161E+307)
' Equal: False
Analogamente, l'esempio seguente, che calcola la radice quadrata di un Complex numero, produce risultati leggermente diversi nelle versioni A 32 bit e IA64 di .NET.
Complex minusOne = new Complex(-1, 0);
Console.WriteLine(Complex.Sqrt(minusOne));
// The example displays the following output:
// (6.12303176911189E-17, 1) on 32-bit systems.
// (6.12323399573677E-17,1) on IA64 systems.
Dim minusOne As New Complex(-1, 0)
Console.WriteLine(Complex.Sqrt(minusOne))
' The example displays the following output:
' (6.12303176911189E-17, 1) on 32-bit systems.
' (6.12323399573677E-17,1) on IA64 systems.
Infinito e NaN
Le parti reali e immaginarie di un numero complesso sono rappresentate da Double valori. Oltre a passare da Double.MinValue a Double.MaxValue, la parte reale o immaginaria di un numero complesso può avere un valore di Double.PositiveInfinity, Double.NegativeInfinity o Double.NaN. Double.PositiveInfinity, Double.NegativeInfinitye Double.NaN vengono propagati in qualsiasi operazione aritmetica o trigonometrica.
Nell'esempio seguente la divisione by Zero produce un numero complesso le cui parti reali e immaginarie sono entrambe Double.NaN. Di conseguenza, l'esecuzione della moltiplicazione con questo valore produce anche un numero complesso le cui parti reali e immaginarie sono Double.NaN. Analogamente, l'esecuzione di una moltiplicazione che supera l'intervallo del tipo Double produce un numero complesso la cui parte reale è Double.NaN e la cui parte immaginaria è Double.PositiveInfinity. Successivamente l'esecuzione della divisione con questo numero complesso restituisce un numero complesso la cui parte reale è Double.NaN e la cui parte immaginaria è Double.PositiveInfinity.
using System;
using System.Numerics;
public class NaNEx
{
public static void Run()
{
Complex c1 = new Complex(Double.MaxValue / 2, Double.MaxValue / 2);
Complex c2 = c1 / Complex.Zero;
Console.WriteLine(c2.ToString());
c2 = c2 * new Complex(1.5, 1.5);
Console.WriteLine(c2.ToString());
Console.WriteLine();
Complex c3 = c1 * new Complex(2.5, 3.5);
Console.WriteLine(c3.ToString());
c3 = c3 + new Complex(Double.MinValue / 2, Double.MaxValue / 2);
Console.WriteLine(c3);
}
}
// The example displays the following output:
// (NaN, NaN)
// (NaN, NaN)
// (NaN, Infinity)
// (NaN, Infinity)
Imports System.Numerics
Module Example4
Public Sub Run()
Dim c1 As Complex = New Complex(Double.MaxValue / 2, Double.MaxValue / 2)
Dim c2 As Complex = c1 / Complex.Zero
Console.WriteLine(c2.ToString())
c2 = c2 * New Complex(1.5, 1.5)
Console.WriteLine(c2.ToString())
Console.WriteLine()
Dim c3 As Complex = c1 * New Complex(2.5, 3.5)
Console.WriteLine(c3.ToString())
c3 = c3 + New Complex(Double.MinValue / 2, Double.MaxValue / 2)
Console.WriteLine(c3)
End Sub
End Module
' The example displays the following output:
' (NaN, NaN)
' (NaN, NaN)
'
' (NaN, Infinity)
' (NaN, Infinity)
Le operazioni matematiche con numeri complessi non validi o che superano l'intervallo del Double tipo di dati non generano un'eccezione. Restituiscono invece un Double.PositiveInfinity, Double.NegativeInfinity o Double.NaN nelle seguenti condizioni:
- La divisione di un numero positivo per zero restituisce Double.PositiveInfinity.
- Qualsiasi operazione che causa l'overflow del limite superiore del tipo di dati Double restituisce Double.PositiveInfinity.
- La divisione di un numero negativo per zero restituisce Double.NegativeInfinity.
- Qualsiasi operazione che supera il limite inferiore del Double tipo restituisce Double.NegativeInfinity.
- La divisione di zero per zero restituisce Double.NaN.
- Qualsiasi operazione eseguita su operandi i cui valori sono Double.PositiveInfinity, Double.NegativeInfinityo Double.NaN restituisce Double.PositiveInfinity, Double.NegativeInfinityo , o Double.NaN, a seconda dell'operazione specifica.
Si noti che questo vale per tutti i calcoli intermedi eseguiti da un metodo. Ad esempio, la moltiplicazione di new Complex(9e308, 9e308) and new Complex(2.5, 3.5) usa la formula (ac - bd) + (ad + bc)i. Il calcolo del componente reale risultante dalla moltiplicazione valuta l'espressione 9e308 2,5 - 9e308 3,5. Ogni moltiplicazione intermedia in questa espressione restituisce Double.PositiveInfinitye il tentativo di sottrarre Double.PositiveInfinity da Double.PositiveInfinity restituisce Double.NaN.
Formattare un numero complesso
Per impostazione predefinita, la rappresentazione di stringa di un numero complesso assume la forma <;, dove reale e > sono le rappresentazioni di stringa dei valori che formano i componenti reali e immaginari del numero complesso. Alcuni sovraccarichi del metodo ToString consentono di personalizzare le rappresentazioni di stringa di questi valori Double per riflettere le convenzioni di formattazione di una determinata cultura o per visualizzare in un formato specifico definito da una stringa di formato numerico standard o personalizzata. Per altre informazioni, vedere Stringhe di formato numerico standard e stringhe di formato numerico personalizzato.
Uno dei modi più comuni per esprimere la rappresentazione di stringa di un numero complesso assume la forma a + bi, dove a è il componente reale del numero complesso ed b è il componente immaginario del numero complesso. Nell'ingegneria elettrica, un numero complesso è espresso più comunemente come a + bj. È possibile restituire la rappresentazione di stringa di un numero complesso in una di queste due forme. A tale scopo, definire un provider di formato personalizzato implementando le interfacce ICustomFormatter e IFormatProvider e quindi chiamare il metodo String.Format(IFormatProvider, String, Object[]).
Nell'esempio seguente viene definita una ComplexFormatter classe che rappresenta un numero complesso sotto forma di a + bi stringa o a + bj.
using System;
using System.Numerics;
public class ComplexFormatter : IFormatProvider, ICustomFormatter
{
public object GetFormat(Type formatType)
{
if (formatType == typeof(ICustomFormatter))
return this;
else
return null;
}
public string Format(string format, object arg,
IFormatProvider provider)
{
if (arg is Complex c1)
{
// Check if the format string has a precision specifier.
int precision;
string fmtString = string.Empty;
if (format.Length > 1)
{
try
{
precision = int.Parse(format.Substring(1));
}
catch (FormatException)
{
precision = 0;
}
fmtString = "N" + precision.ToString();
}
if (format.Substring(0, 1).Equals("I", StringComparison.OrdinalIgnoreCase))
{
// Determine the sign to display.
char sign = c1.Imaginary < 0 ? '-' : '+';
// Display the determined sign and the absolute value of the imaginary part.
return c1.Real.ToString(fmtString) + " " + sign + " " + Math.Abs(c1.Imaginary).ToString(fmtString) + "i";
}
else if (format.Substring(0, 1).Equals("J", StringComparison.OrdinalIgnoreCase))
{
// Determine the sign to display.
char sign = c1.Imaginary < 0 ? '-' : '+';
// Display the determined sign and the absolute value of the imaginary part.
return c1.Real.ToString(fmtString) + " " + sign + " " + Math.Abs(c1.Imaginary).ToString(fmtString) + "j";
}
else
return c1.ToString(format, provider);
}
else
{
if (arg is IFormattable formattable)
return formattable.ToString(format, provider);
else if (arg != null)
return arg.ToString();
else
return string.Empty;
}
}
}
Imports System.Numerics
Public Class ComplexFormatter
Implements IFormatProvider, ICustomFormatter
Public Function GetFormat(formatType As Type) As Object _
Implements IFormatProvider.GetFormat
If formatType Is GetType(ICustomFormatter) Then
Return Me
Else
Return Nothing
End If
End Function
Public Function Format(fmt As String, arg As Object,
provider As IFormatProvider) As String _
Implements ICustomFormatter.Format
If TypeOf arg Is Complex Then
Dim c1 As Complex = DirectCast(arg, Complex)
' Check if the format string has a precision specifier.
Dim precision As Integer
Dim fmtString As String = String.Empty
If fmt.Length > 1 Then
Try
precision = Integer.Parse(fmt.Substring(1))
Catch e As FormatException
precision = 0
End Try
fmtString = "N" + precision.ToString()
End If
' Determine the sign to display.
Dim sign As Char = If(c1.Imaginary < 0.0, "-"c, "+"c)
' Display the determined sign and the absolute value of the imaginary part.
If fmt.Substring(0, 1).Equals("I", StringComparison.OrdinalIgnoreCase) Then
Return c1.Real.ToString(fmtString) + " " + sign + " " + Math.Abs(c1.Imaginary).ToString(fmtString) + "i"
ElseIf fmt.Substring(0, 1).Equals("J", StringComparison.OrdinalIgnoreCase) Then
Return c1.Real.ToString(fmtString) + " " + sign + " " + Math.Abs(c1.Imaginary).ToString(fmtString) + "j"
Else
Return c1.ToString(fmt, provider)
End If
Else
If TypeOf arg Is IFormattable Then
Return DirectCast(arg, IFormattable).ToString(fmt, provider)
ElseIf arg IsNot Nothing Then
Return arg.ToString()
Else
Return String.Empty
End If
End If
End Function
End Class
Nell'esempio seguente viene quindi usato questo formattatore personalizzato per visualizzare la rappresentazione di stringa di un numero complesso.
public class CustomFormatEx
{
public static void Run()
{
Complex c1 = new(12.1, 15.4);
Console.WriteLine($"Formatting with ToString: {c1}");
Console.WriteLine($"Formatting with ToString(format): {c1:N2}");
Console.WriteLine($"Custom formatting with I0:\t" +
$" {string.Format(new ComplexFormatter(), "{0:I0}", c1)}");
Console.WriteLine($"Custom formatting with J3:\t" +
$" {string.Format(new ComplexFormatter(), "{0:J3}", c1)}");
}
}
// The example displays the following output:
// Formatting with ToString(): <12.1; 15.4>
// Formatting with ToString(format): <12.10; 15.40>
// Custom formatting with I0: 12 + 15i
// Custom formatting with J3: 12.100 + 15.400j
Module Example2
Public Sub Run()
Dim c1 As New Complex(12.1, 15.4)
Console.WriteLine($"Formatting with ToString(): {c1}")
Console.WriteLine($"Formatting with ToString(format): {c1:N2}")
Console.WriteLine($"Custom formatting with I0: " +
$"{String.Format(New ComplexFormatter(), "{0:I0}", c1)}")
Console.WriteLine($"Custom formatting with J3: " +
$"{String.Format(New ComplexFormatter(), "{0:J3}", c1)}")
End Sub
End Module
' The example displays the following output:
' Formatting with ToString(): <12.1; 15.4>
' Formatting with ToString(format): <12.10; 15.40>
' Custom formatting with I0: 12 + 15i
' Custom formatting with J3: 12.100 + 15.400j
Costruttori
| Nome | Descrizione |
|---|---|
| Complex(Double, Double) |
Inizializza una nuova istanza della Complex struttura utilizzando i valori reali e immaginari specificati. |
Campi
| Nome | Descrizione |
|---|---|
| ImaginaryOne |
Restituisce una nuova Complex istanza con un numero reale uguale a zero e un numero immaginario uguale a uno. |
| Infinity |
Rappresenta l'infinito come numero complesso. |
| NaN |
Rappresenta un'istanza complessa che non è un numero (NaN). |
| One |
Restituisce una nuova Complex istanza con un numero reale uguale a uno e un numero immaginario uguale a zero. |
| Zero |
Restituisce una nuova Complex istanza con un numero reale uguale a zero e un numero immaginario uguale a zero. |
Proprietà
| Nome | Descrizione |
|---|---|
| Imaginary |
Ottiene il componente immaginario dell'oggetto corrente Complex . |
| Magnitude |
Ottiene la grandezza (o il valore assoluto) di un numero complesso. |
| Phase |
Ottiene la fase di un numero complesso. |
| Real |
Ottiene il componente reale dell'oggetto corrente Complex . |
Metodi
| Nome | Descrizione |
|---|---|
| Abs(Complex) |
Ottiene il valore assoluto (o grandezza) di un numero complesso. |
| Acos(Complex) |
Restituisce l'angolo che rappresenta l'arco coseno del numero complesso specificato. |
| Add(Complex, Complex) |
Aggiunge due numeri complessi e restituisce il risultato. |
| Add(Complex, Double) |
Aggiunge un numero complesso a un numero reale a precisione doppia e restituisce il risultato. |
| Add(Double, Complex) |
Aggiunge un numero reale a precisione doppia a un numero complesso e restituisce il risultato. |
| Asin(Complex) |
Restituisce l'angolo che rappresenta il seno arco del numero complesso specificato. |
| Atan(Complex) |
Restituisce l'angolo che rappresenta la tangente dell'arco del numero complesso specificato. |
| Conjugate(Complex) |
Calcola il coniugato di un numero complesso e restituisce il risultato. |
| Cos(Complex) |
Restituisce il coseno del numero complesso specificato. |
| Cosh(Complex) |
Restituisce il coseno iperbolico del numero complesso specificato. |
| CreateChecked<TOther>(TOther) |
Crea un'istanza del tipo corrente da un valore, generando un'eccezione di overflow per tutti i valori che non rientrano nell'intervallo rappresentabile del tipo corrente. |
| CreateSaturating<TOther>(TOther) |
Crea un'istanza del tipo corrente da un valore, saturando tutti i valori che non rientrano nell'intervallo rappresentabile del tipo corrente. |
| CreateTruncating<TOther>(TOther) |
Crea un'istanza del tipo corrente da un valore, troncando tutti i valori che non rientrano nell'intervallo rappresentabile del tipo corrente. |
| Divide(Complex, Complex) |
Divide un numero complesso per un altro e restituisce il risultato. |
| Divide(Complex, Double) |
Divide un numero complesso per un numero reale a precisione doppia e restituisce il risultato. |
| Divide(Double, Complex) |
Divide un numero reale a precisione doppia per un numero complesso e restituisce il risultato. |
| Equals(Complex) |
Restituisce un valore che indica se l'istanza corrente e un numero complesso specificato hanno lo stesso valore. |
| Equals(Object) |
Restituisce un valore che indica se l'istanza corrente e un oggetto specificato hanno lo stesso valore. |
| Exp(Complex) |
Restituisce |
| FromPolarCoordinates(Double, Double) |
Crea un numero complesso dalle coordinate polari di un punto. |
| GetHashCode() |
Restituisce il codice hash per l'oggetto corrente Complex . |
| IsComplexNumber(Complex) |
Determina se un valore rappresenta un valore complesso. |
| IsEvenInteger(Complex) |
Determina se un valore rappresenta un numero integrale pari. |
| IsFinite(Complex) |
Determina se il numero complesso specificato è finito. |
| IsImaginaryNumber(Complex) |
Determina se un valore rappresenta un numero immaginario. |
| IsInfinity(Complex) |
Restituisce un valore che indica se il numero complesso specificato restituisce infinito. |
| IsInteger(Complex) |
Determina se un valore rappresenta un valore integrale. |
| IsNaN(Complex) |
Restituisce un valore che indica se l'istanza complessa specificata non è un numero (NaN). |
| IsNegative(Complex) |
Determina se un valore è negativo. |
| IsNegativeInfinity(Complex) |
Determina se un valore è infinito negativo. |
| IsNormal(Complex) |
Determina se un valore è normale. |
| IsOddInteger(Complex) |
Determina se un valore rappresenta un numero integrale dispari. |
| IsPositive(Complex) |
Determina se un valore è positivo. |
| IsPositiveInfinity(Complex) |
Determina se un valore è infinito positivo. |
| IsRealNumber(Complex) |
Determina se un valore rappresenta un numero reale. |
| IsSubnormal(Complex) |
Determina se un valore è sottonormamale. |
| Log(Complex, Double) |
Restituisce il logaritmo di un numero complesso specificato in una base specificata. |
| Log(Complex) |
Restituisce il logaritmo naturale (base |
| Log10(Complex) |
Restituisce il logaritmo di base 10 di un numero complesso specificato. |
| MaxMagnitude(Complex, Complex) |
Confronta due valori con il calcolo maggiore. |
| MinMagnitude(Complex, Complex) |
Confronta due valori con il calcolo minore. |
| Multiply(Complex, Complex) |
Restituisce il prodotto di due numeri complessi. |
| Multiply(Complex, Double) |
Restituisce il prodotto di un numero complesso e un numero reale a precisione doppia. |
| Multiply(Double, Complex) |
Restituisce il prodotto di un numero reale a precisione doppia e di un numero complesso. |
| Negate(Complex) |
Restituisce l'inverso aggiuntivo di un numero complesso specificato. |
| Parse(ReadOnlySpan<Byte>, IFormatProvider) |
Rappresenta un numero complesso. |
| Parse(ReadOnlySpan<Byte>, NumberStyles, IFormatProvider) |
Rappresenta un numero complesso. |
| Parse(ReadOnlySpan<Char>, IFormatProvider) |
Analizza un intervallo di caratteri in un valore. |
| Parse(ReadOnlySpan<Char>, NumberStyles, IFormatProvider) |
Analizza un intervallo di caratteri in un valore. |
| Parse(String, IFormatProvider) |
Analizza una stringa in un valore. |
| Parse(String, NumberStyles, IFormatProvider) |
Analizza una stringa in un valore. |
| Pow(Complex, Complex) |
Restituisce un numero complesso specificato elevato a una potenza specificata da un numero complesso. |
| Pow(Complex, Double) |
Restituisce un numero complesso specificato elevato a una potenza specificata da un numero a virgola mobile e precisione doppia. |
| Reciprocal(Complex) |
Restituisce l'inverso moltiplicativo di un numero complesso. |
| Sin(Complex) |
Restituisce il seno del numero complesso specificato. |
| Sinh(Complex) |
Restituisce il seno iperbolico del numero complesso specificato. |
| Sqrt(Complex) |
Restituisce la radice quadrata di un numero complesso specificato. |
| Subtract(Complex, Complex) |
Sottrae un numero complesso da un altro e restituisce il risultato. |
| Subtract(Complex, Double) |
Sottrae un numero reale a precisione doppia da un numero complesso e restituisce il risultato. |
| Subtract(Double, Complex) |
Sottrae un numero complesso da un numero reale a precisione doppia e restituisce il risultato. |
| Tan(Complex) |
Restituisce la tangente del numero complesso specificato. |
| Tanh(Complex) |
Restituisce la tangente iperbolica del numero complesso specificato. |
| ToString() |
Converte il valore del numero complesso corrente nella rappresentazione di stringa equivalente in formato cartesiano. |
| ToString(IFormatProvider) |
Converte il valore del numero complesso corrente nella rappresentazione di stringa equivalente in formato cartesiano utilizzando le informazioni di formattazione specifiche delle impostazioni cultura specificate. |
| ToString(String, IFormatProvider) |
Converte il valore del numero complesso corrente nella rappresentazione di stringa equivalente in formato cartesiano utilizzando il formato specificato e le informazioni sul formato specifico delle impostazioni cultura per le parti reali e immaginarie. |
| ToString(String) |
Converte il valore del numero complesso corrente nella rappresentazione di stringa equivalente in formato cartesiano utilizzando il formato specificato per le parti reali e immaginarie. |
| TryFormat(Span<Byte>, Int32, ReadOnlySpan<Char>, IFormatProvider) |
Prova a formattare il valore dell'istanza corrente come UTF-8 nell'intervallo di byte specificato. |
| TryFormat(Span<Char>, Int32, ReadOnlySpan<Char>, IFormatProvider) |
Tenta di formattare il valore dell'istanza corrente nell'intervallo di caratteri specificato. |
| TryParse(ReadOnlySpan<Byte>, IFormatProvider, Complex) |
Rappresenta un numero complesso. |
| TryParse(ReadOnlySpan<Byte>, NumberStyles, IFormatProvider, Complex) |
Rappresenta un numero complesso. |
| TryParse(ReadOnlySpan<Char>, IFormatProvider, Complex) |
Tenta di analizzare un intervallo di caratteri in un valore. |
| TryParse(ReadOnlySpan<Char>, NumberStyles, IFormatProvider, Complex) |
Tenta di analizzare un intervallo di caratteri in un valore. |
| TryParse(String, IFormatProvider, Complex) |
Tenta di analizzare una stringa in un valore. |
| TryParse(String, NumberStyles, IFormatProvider, Complex) |
Tenta di analizzare una stringa in un valore. |
Operatori
| Nome | Descrizione |
|---|---|
| Addition(Complex, Complex) |
Aggiunge due numeri complessi. |
| Addition(Complex, Double) |
Aggiunge un numero complesso a un numero reale a precisione doppia. |
| Addition(Double, Complex) |
Aggiunge un numero reale a precisione doppia a un numero complesso. |
| Decrement(Complex) |
Decrementa un valore. |
| Division(Complex, Complex) |
Divide un numero complesso specificato in base a un altro numero complesso specificato. |
| Division(Complex, Double) |
Divide un numero complesso specificato in base a un numero reale a precisione doppia specificato. |
| Division(Double, Complex) |
Divide un numero reale a precisione doppia specificato in base a un numero complesso specificato. |
| Equality(Complex, Complex) |
Restituisce un valore che indica se due numeri complessi sono uguali. |
| Explicit(BigInteger to Complex) |
Definisce una conversione esplicita di un BigInteger valore in un numero complesso. |
| Explicit(Decimal to Complex) |
Definisce una conversione esplicita di un Decimal valore in un numero complesso. |
| Explicit(Int128 to Complex) |
Converte in modo esplicito un Int128 valore in un numero complesso a precisione doppia. |
| Explicit(UInt128 to Complex) |
Converte in modo esplicito un UInt128 valore in un numero complesso a precisione doppia. |
| Implicit(BFloat16 to Complex) |
Rappresenta un numero complesso. |
| Implicit(Byte to Complex) |
Definisce una conversione implicita di un byte senza segno in un numero complesso. |
| Implicit(Char to Complex) |
Converte in modo implicito un Char valore in un numero complesso a precisione doppia. |
| Implicit(Double to Complex) |
Definisce una conversione implicita di un numero a virgola mobile e precisione doppia in un numero complesso. |
| Implicit(Half to Complex) |
Converte in modo implicito un Half valore in un numero complesso a precisione doppia. |
| Implicit(Int16 to Complex) |
Definisce una conversione implicita di un intero con segno a 16 bit in un numero complesso. |
| Implicit(Int32 to Complex) |
Definisce una conversione implicita di un intero con segno a 32 bit in un numero complesso. |
| Implicit(Int64 to Complex) |
Definisce una conversione implicita di un intero con segno a 64 bit in un numero complesso. |
| Implicit(IntPtr to Complex) |
Converte in modo implicito un IntPtr valore in un numero complesso a precisione doppia. |
| Implicit(SByte to Complex) |
Definisce una conversione implicita di un byte firmato in un numero complesso. Questa API non è conforme a CLS. |
| Implicit(Single to Complex) |
Definisce una conversione implicita di un numero a virgola mobile e precisione singola in un numero complesso. |
| Implicit(UInt16 to Complex) |
Definisce una conversione implicita di un intero senza segno a 16 bit in un numero complesso. Questa API non è conforme a CLS. |
| Implicit(UInt32 to Complex) |
Definisce una conversione implicita di un intero senza segno a 32 bit in un numero complesso. Questa API non è conforme a CLS. |
| Implicit(UInt64 to Complex) |
Definisce una conversione implicita di un intero senza segno a 64 bit in un numero complesso. Questa API non è conforme a CLS. |
| Implicit(UIntPtr to Complex) |
Converte in modo implicito un UIntPtr valore in un numero complesso a precisione doppia. |
| Increment(Complex) |
Incrementa un valore. |
| Inequality(Complex, Complex) |
Restituisce un valore che indica se due numeri complessi non sono uguali. |
| Multiply(Complex, Complex) |
Moltiplica due numeri complessi specificati. |
| Multiply(Complex, Double) |
Moltiplica il numero complesso specificato per un numero reale a precisione doppia specificato. |
| Multiply(Double, Complex) |
Moltiplica un numero reale a precisione doppia specificato per un numero complesso specificato. |
| Subtraction(Complex, Complex) |
Sottrae un numero complesso da un altro numero complesso. |
| Subtraction(Complex, Double) |
Sottrae un numero reale a precisione doppia da un numero complesso. |
| Subtraction(Double, Complex) |
Sottrae un numero complesso da un numero reale a precisione doppia. |
| UnaryNegation(Complex) |
Restituisce l'inverso aggiuntivo di un numero complesso specificato. |
| UnaryPlus(Complex) |
Calcola il plus unario di un valore. |
Implementazioni dell'interfaccia esplicita
| Nome | Descrizione |
|---|---|
| IAdditiveIdentity<Complex,Complex>.AdditiveIdentity |
Ottiene l'identità aggiuntiva del tipo corrente. |
| IMultiplicativeIdentity<Complex,Complex>.MultiplicativeIdentity |
Ottiene l'identità moltiplicativa del tipo corrente. |
| INumberBase<Complex>.Abs(Complex) |
Calcola l'assoluto di un valore. |
| INumberBase<Complex>.IsCanonical(Complex) |
Determina se un valore è nella relativa rappresentazione canonica. |
| INumberBase<Complex>.IsZero(Complex) |
Determina se un valore è zero. |
| INumberBase<Complex>.MaxMagnitudeNumber(Complex, Complex) |
Confronta due valori con il calcolo con la grandezza maggiore e restituendo l'altro valore se un input è |
| INumberBase<Complex>.MinMagnitudeNumber(Complex, Complex) |
Confronta due valori con il calcolo con la grandezza minore e restituendo l'altro valore se un input è |
| INumberBase<Complex>.MultiplyAddEstimate(Complex, Complex, Complex) |
Calcola una stima di ( |
| INumberBase<Complex>.One |
Ottiene il valore |
| INumberBase<Complex>.Radix |
Ottiene la radice o la base del tipo. |
| INumberBase<Complex>.TryConvertFromChecked<TOther>(TOther, Complex) |
Rappresenta un numero complesso. |
| INumberBase<Complex>.TryConvertFromSaturating<TOther>(TOther, Complex) |
Rappresenta un numero complesso. |
| INumberBase<Complex>.TryConvertFromTruncating<TOther>(TOther, Complex) |
Rappresenta un numero complesso. |
| INumberBase<Complex>.TryConvertToChecked<TOther>(Complex, TOther) |
Tenta di convertire un'istanza del tipo corrente in un altro tipo, generando un'eccezione di overflow per tutti i valori che non rientrano nell'intervallo rappresentabile del tipo corrente. |
| INumberBase<Complex>.TryConvertToSaturating<TOther>(Complex, TOther) |
Tenta di convertire un'istanza del tipo corrente in un altro tipo, saturando tutti i valori che non rientrano nell'intervallo rappresentabile del tipo corrente. |
| INumberBase<Complex>.TryConvertToTruncating<TOther>(Complex, TOther) |
Tenta di convertire un'istanza del tipo corrente in un altro tipo, troncando tutti i valori che non rientrano nell'intervallo rappresentabile del tipo corrente. |
| INumberBase<Complex>.Zero |
Ottiene il valore |
| ISignedNumber<Complex>.NegativeOne |
Ottiene il valore |