Complex Estructura
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Representa un número complejo.
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)
- Herencia
- Atributos
- Implementaciones
-
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>
Comentarios
Un número complejo es un número que consta de una parte de número real y una parte numérica imaginaria. Un número complejo z se escribe normalmente en la forma z = x + yi, donde x e y son números reales, y i es la unidad imaginaria que tiene la propiedad i2 = -1. La parte real del número complejo se representa mediante x y la parte imaginaria del número complejo se representa mediante y.
El Complex tipo usa el sistema de coordenadas cartesiano (real, imaginario) al crear instancias y manipular números complejos. Un número complejo se puede representar como un punto en un sistema de coordenadas bidimensional, que se conoce como plano complejo. La parte real del número complejo se coloca en el eje X (el eje horizontal) y la parte imaginaria se coloca en el eje Y (el eje vertical).
Cualquier punto del plano complejo también se puede expresar en función de su valor absoluto mediante el sistema de coordenadas polares. En coordenadas polares, un punto se caracteriza por dos números:
- Su magnitud, que es la distancia del punto desde el origen (es decir, 0,0 o el punto en el que se interseca el eje X y el eje Y).
- Su fase, que es el ángulo entre el eje real y la línea dibujada desde el origen hasta el punto.
Instanciar un número complejo
Puede asignar un valor a un número complejo de una de las maneras siguientes:
Pasando dos valores Double a su constructor. El primer valor representa la parte real del número complejo y el segundo valor representa su parte imaginaria. Estos valores representan la posición del número complejo en el sistema de coordenadas cartesiano bidimensional.
Llamando al método estático (
Shareden Visual Basic) Complex.FromPolarCoordinates para crear un número complejo a partir de sus coordenadas polares.Asignando un valor Byte, SByte, Int16, UInt16, Int32, UInt32, Int64, UInt64, Single o Double a un objeto Complex. El valor se convierte en la parte real del número complejo y su parte imaginaria es igual a 0.
Al transformar (en C#) o convertir (en Visual Basic) un valor de Decimal o BigInteger en un objeto de Complex. El valor se convierte en la parte real del número complejo y su parte imaginaria es igual a 0.
Asignando el número complejo devuelto por un método o operador a un Complex objeto . Por ejemplo, Complex.Add es un método estático que devuelve un número complejo que es la suma de dos números complejos y el Complex.Addition operador agrega dos números complejos y devuelve el resultado.
En el ejemplo siguiente se muestra cada una de estas cinco formas de asignar un valor a un número complejo.
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)
Operaciones con números complejos
La Complex estructura de .NET incluye miembros que proporcionan la siguiente funcionalidad:
- Métodos para comparar dos números complejos para determinar si son iguales.
- Operadores para realizar operaciones aritméticas en números complejos. Complex los operadores permiten realizar sumas, restas, multiplicación, división y negación unaria con números complejos.
- Métodos para realizar otras operaciones numéricas en números complejos. Además de las cuatro operaciones aritméticas básicas, puede elevar un número complejo a una potencia especificada, buscar la raíz cuadrada de un número complejo y obtener el valor absoluto de un número complejo.
- Métodos para realizar operaciones trigonométricas en números complejos. Por ejemplo, puede calcular la tangente de un ángulo representado por un número complejo.
Tenga en cuenta que, dado que las Real propiedades y Imaginary son de solo lectura, no se puede modificar el valor de un objeto existente Complex . Todos los métodos que realizan una operación en un Complex número, si su valor devuelto es de tipo Complex, devuelven un nuevo Complex número.
Precisión y números complejos
Las partes reales e imaginarias de un número complejo se representan mediante dos valores de punto flotante de precisión doble. Esto significa que Complex los valores, como los valores de punto flotante de precisión doble, pueden perder precisión como resultado de operaciones numéricas. Esto significa que se pueden producir errores en comparaciones estrictas para la igualdad de dos Complex valores, incluso si la diferencia entre los dos valores se debe a una pérdida de precisión. Para obtener más información, consulte Double.
Por ejemplo, realizar la exponenciación en el logaritmo de un número debe devolver el número original. Sin embargo, en algunos casos, la pérdida de precisión de los valores de punto flotante puede provocar pequeñas diferencias entre los dos valores, como se muestra en el ejemplo siguiente.
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
Del mismo modo, el ejemplo siguiente, que calcula la raíz cuadrada de un Complex número, genera resultados ligeramente diferentes en las versiones de 32 bits e IA64 de .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.
Infinity y NaN
Las partes reales e imaginarias de un número complejo se representan mediante Double valores. Además de ir de Double.MinValue a Double.MaxValue, la parte real o imaginaria de un número complejo puede tener un valor de Double.PositiveInfinity, Double.NegativeInfinityo Double.NaN. Double.PositiveInfinity, Double.NegativeInfinityy Double.NaN todas se propagan en cualquier operación aritmética o trigonométrica.
En el ejemplo siguiente, la división por Zero produce un número complejo cuyos elementos reales e imaginarios son ambos Double.NaN. Como resultado, la realización de la multiplicación con este valor también genera un número complejo cuyas partes reales e imaginarias son Double.NaN. Del mismo modo, la realización de una multiplicación que desborda el intervalo del Double tipo produce un número complejo cuya parte real es Double.NaN y cuya parte imaginaria es Double.PositiveInfinity. Posteriormente, la división con este número complejo devuelve un número complejo cuya parte real es Double.NaN y cuya parte imaginaria es 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)
Las operaciones matemáticas con números complejos que no son válidos o que desbordan el intervalo del tipo de Double datos no producen una excepción. En su lugar, devuelven un Double.PositiveInfinity, Double.NegativeInfinityo Double.NaN en las condiciones siguientes:
- La división de un número positivo por cero devuelve Double.PositiveInfinity.
- Cualquier operación que desborda el límite superior del Double tipo de datos devuelve Double.PositiveInfinity.
- La división de un número negativo por cero devuelve Double.NegativeInfinity.
- Cualquier operación que desborda el límite inferior del Double tipo de datos devuelve Double.NegativeInfinity.
- La división de un cero por cero devuelve Double.NaN.
- Cualquier operación que se realice en operandos cuyos valores sean Double.PositiveInfinity, Double.NegativeInfinityo Double.NaN devuelve Double.PositiveInfinity, Double.NegativeInfinityo Double.NaN, dependiendo de la operación específica.
Tenga en cuenta que esto se aplica a los cálculos intermedios realizados por un método . Por ejemplo, la multiplicación de new Complex(9e308, 9e308) and new Complex(2.5, 3.5) usa la fórmula (ac - bd) + (ad + bc)i. El cálculo del componente real resultante de la multiplicación evalúa la expresión 9e308 2.5 - 9e308 3.5. Cada multiplicación intermedia de esta expresión devuelve Double.PositiveInfinityy el intento de restar Double.PositiveInfinity de Double.PositiveInfinity devuelve Double.NaN.
Dar formato a un número complejo
De forma predeterminada, la representación de cadena de un número complejo adopta la forma <;, donde real e > son las representaciones de cadena de los valores que forman los componentes reales e imaginarios del número complejo. Algunas sobrecargas del ToString método permiten personalizar las representaciones de cadena de estos Double valores para reflejar las convenciones de formato de una referencia cultural determinada o aparecer en un formato determinado definido por una cadena de formato numérico estándar o personalizado. (Para obtener más información, consulte Cadenas de formato numérico estándar y cadenas de formato numérico personalizado).
Una de las formas más comunes de expresar la representación de cadena de un número complejo toma la forma a + bi, donde a es el componente real del número complejo y b es el componente imaginario del número complejo. En la ingeniería eléctrica, un número complejo se expresa normalmente como a + bj. Puede devolver la representación de cadena de un número complejo en cualquiera de estas dos formas. Para ello, defina un proveedor de formato personalizado mediante la implementación de las ICustomFormatter interfaces y IFormatProvider y, a continuación, llame al String.Format(IFormatProvider, String, Object[]) método .
En el ejemplo siguiente se define una ComplexFormatter clase que representa un número complejo como una cadena en forma de a + bi 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
A continuación, en el ejemplo siguiente se usa este formateador personalizado para mostrar la representación de cadena de un número complejo.
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
Constructores
| Nombre | Description |
|---|---|
| Complex(Double, Double) |
Inicializa una nueva instancia de la Complex estructura utilizando los valores reales e imaginarios especificados. |
Campos
| Nombre | Description |
|---|---|
| ImaginaryOne |
Devuelve una nueva Complex instancia con un número real igual a cero y un número imaginario igual a uno. |
| Infinity |
Representa infinito como un número complejo. |
| NaN |
Representa una instancia compleja que no es un número (NaN). |
| One |
Devuelve una nueva Complex instancia con un número real igual a uno y un número imaginario igual a cero. |
| Zero |
Devuelve una nueva Complex instancia con un número real igual a cero y un número imaginario igual a cero. |
Propiedades
| Nombre | Description |
|---|---|
| Imaginary |
Obtiene el componente imaginario del objeto actual Complex . |
| Magnitude |
Obtiene la magnitud (o valor absoluto) de un número complejo. |
| Phase |
Obtiene la fase de un número complejo. |
| Real |
Obtiene el componente real del objeto actual Complex . |
Métodos
| Nombre | Description |
|---|---|
| Abs(Complex) |
Obtiene el valor absoluto (o magnitud) de un número complejo. |
| Acos(Complex) |
Devuelve el ángulo que es el coseno de arco del número complejo especificado. |
| Add(Complex, Complex) |
Agrega dos números complejos y devuelve el resultado. |
| Add(Complex, Double) |
Agrega un número complejo a un número real de precisión doble y devuelve el resultado. |
| Add(Double, Complex) |
Agrega un número real de precisión doble a un número complejo y devuelve el resultado. |
| Asin(Complex) |
Devuelve el ángulo que es el seno de arco del número complejo especificado. |
| Atan(Complex) |
Devuelve el ángulo que es la tangente de arco del número complejo especificado. |
| Conjugate(Complex) |
Calcula el conjugado de un número complejo y devuelve el resultado. |
| Cos(Complex) |
Devuelve el coseno del número complejo especificado. |
| Cosh(Complex) |
Devuelve el coseno hiperbólico del número complejo especificado. |
| CreateChecked<TOther>(TOther) |
Crea una instancia del tipo actual a partir de un valor, iniciando una excepción de desbordamiento para los valores que se encuentran fuera del intervalo que se puede representar del tipo actual. |
| CreateSaturating<TOther>(TOther) |
Crea una instancia del tipo actual a partir de un valor, saturando los valores que se encuentran fuera del intervalo que se puede representar del tipo actual. |
| CreateTruncating<TOther>(TOther) |
Crea una instancia del tipo actual a partir de un valor, truncando los valores que se encuentran fuera del intervalo que se puede representar del tipo actual. |
| Divide(Complex, Complex) |
Divide un número complejo por otro y devuelve el resultado. |
| Divide(Complex, Double) |
Divide un número complejo por un número real de precisión doble y devuelve el resultado. |
| Divide(Double, Complex) |
Divide un número real de precisión doble por un número complejo y devuelve el resultado. |
| Equals(Complex) |
Devuelve un valor que indica si la instancia actual y un número complejo especificado tienen el mismo valor. |
| Equals(Object) |
Devuelve un valor que indica si la instancia actual y un objeto especificado tienen el mismo valor. |
| Exp(Complex) |
Devuelve |
| FromPolarCoordinates(Double, Double) |
Crea un número complejo a partir de las coordenadas polares de un punto. |
| GetHashCode() |
Devuelve el código hash del objeto actual Complex . |
| IsComplexNumber(Complex) |
Determina si un valor representa un valor complejo. |
| IsEvenInteger(Complex) |
Determina si un valor representa un número entero par. |
| IsFinite(Complex) |
Determina si el número complejo especificado es finito. |
| IsImaginaryNumber(Complex) |
Determina si un valor representa un número imaginario. |
| IsInfinity(Complex) |
Devuelve un valor que indica si el número complejo especificado se evalúa como infinito. |
| IsInteger(Complex) |
Determina si un valor representa un valor entero. |
| IsNaN(Complex) |
Devuelve un valor que indica si la instancia compleja especificada no es un número (NaN). |
| IsNegative(Complex) |
Determina si un valor es negativo. |
| IsNegativeInfinity(Complex) |
Determina si un valor es infinito negativo. |
| IsNormal(Complex) |
Determina si un valor es normal. |
| IsOddInteger(Complex) |
Determina si un valor representa un número entero impar. |
| IsPositive(Complex) |
Determina si un valor es positivo. |
| IsPositiveInfinity(Complex) |
Determina si un valor es infinito positivo. |
| IsRealNumber(Complex) |
Determina si un valor representa un número real. |
| IsSubnormal(Complex) |
Determina si un valor es subnormal. |
| Log(Complex, Double) |
Devuelve el logaritmo de un número complejo especificado en una base especificada. |
| Log(Complex) |
Devuelve el logaritmo natural (base |
| Log10(Complex) |
Devuelve el logaritmo base 10 de un número complejo especificado. |
| MaxMagnitude(Complex, Complex) |
Compara dos valores con el proceso, que es mayor. |
| MinMagnitude(Complex, Complex) |
Compara dos valores con el proceso, que es menor. |
| Multiply(Complex, Complex) |
Devuelve el producto de dos números complejos. |
| Multiply(Complex, Double) |
Devuelve el producto de un número complejo y un número real de precisión doble. |
| Multiply(Double, Complex) |
Devuelve el producto de un número real de precisión doble y un número complejo. |
| Negate(Complex) |
Devuelve el inverso aditivo de un número complejo especificado. |
| Parse(ReadOnlySpan<Byte>, IFormatProvider) |
Representa un número complejo. |
| Parse(ReadOnlySpan<Byte>, NumberStyles, IFormatProvider) |
Representa un número complejo. |
| Parse(ReadOnlySpan<Char>, IFormatProvider) |
Analiza un intervalo de caracteres en un valor. |
| Parse(ReadOnlySpan<Char>, NumberStyles, IFormatProvider) |
Analiza un intervalo de caracteres en un valor. |
| Parse(String, IFormatProvider) |
Analiza una cadena en un valor. |
| Parse(String, NumberStyles, IFormatProvider) |
Analiza una cadena en un valor. |
| Pow(Complex, Complex) |
Devuelve un número complejo especificado elevado a una potencia especificada por un número complejo. |
| Pow(Complex, Double) |
Devuelve un número complejo especificado elevado a una potencia especificada por un número de punto flotante de precisión doble. |
| Reciprocal(Complex) |
Devuelve el inverso multiplicativo de un número complejo. |
| Sin(Complex) |
Devuelve el seno del número complejo especificado. |
| Sinh(Complex) |
Devuelve el seno hiperbólico del número complejo especificado. |
| Sqrt(Complex) |
Devuelve la raíz cuadrada de un número complejo especificado. |
| Subtract(Complex, Complex) |
Resta un número complejo de otro y devuelve el resultado. |
| Subtract(Complex, Double) |
Resta un número real de precisión doble de un número complejo y devuelve el resultado. |
| Subtract(Double, Complex) |
Resta un número complejo de un número real de precisión doble y devuelve el resultado. |
| Tan(Complex) |
Devuelve la tangente del número complejo especificado. |
| Tanh(Complex) |
Devuelve la tangente hiperbólica del número complejo especificado. |
| ToString() |
Convierte el valor del número complejo actual en su representación de cadena equivalente en forma cartesiana. |
| ToString(IFormatProvider) |
Convierte el valor del número complejo actual en su representación de cadena equivalente en formato cartesiano mediante la información de formato específica de la referencia cultural especificada. |
| ToString(String, IFormatProvider) |
Convierte el valor del número complejo actual en su representación de cadena equivalente en forma cartesiana mediante el formato especificado y la información de formato específica de la referencia cultural para sus partes reales e imaginarias. |
| ToString(String) |
Convierte el valor del número complejo actual en su representación de cadena equivalente en forma cartesiana utilizando el formato especificado para sus partes reales e imaginarias. |
| TryFormat(Span<Byte>, Int32, ReadOnlySpan<Char>, IFormatProvider) |
Intenta dar formato al valor de la instancia actual como UTF-8 en el intervalo de bytes proporcionado. |
| TryFormat(Span<Char>, Int32, ReadOnlySpan<Char>, IFormatProvider) |
Intenta dar formato al valor de la instancia actual en el intervalo de caracteres proporcionado. |
| TryParse(ReadOnlySpan<Byte>, IFormatProvider, Complex) |
Representa un número complejo. |
| TryParse(ReadOnlySpan<Byte>, NumberStyles, IFormatProvider, Complex) |
Representa un número complejo. |
| TryParse(ReadOnlySpan<Char>, IFormatProvider, Complex) |
Intenta analizar un intervalo de caracteres en un valor. |
| TryParse(ReadOnlySpan<Char>, NumberStyles, IFormatProvider, Complex) |
Intenta analizar un intervalo de caracteres en un valor. |
| TryParse(String, IFormatProvider, Complex) |
Intenta analizar una cadena en un valor. |
| TryParse(String, NumberStyles, IFormatProvider, Complex) |
Intenta analizar una cadena en un valor. |
Operadores
| Nombre | Description |
|---|---|
| Addition(Complex, Complex) |
Agrega dos números complejos. |
| Addition(Complex, Double) |
Agrega un número complejo a un número real de precisión doble. |
| Addition(Double, Complex) |
Agrega un número real de precisión doble a un número complejo. |
| Decrement(Complex) |
Disminuye un valor. |
| Division(Complex, Complex) |
Divide un número complejo especificado por otro número complejo especificado. |
| Division(Complex, Double) |
Divide un número complejo especificado por un número real de precisión doble especificado. |
| Division(Double, Complex) |
Divide un número real de precisión doble especificado por un número complejo especificado. |
| Equality(Complex, Complex) |
Devuelve un valor que indica si dos números complejos son iguales. |
| Explicit(BigInteger to Complex) |
Define una conversión explícita de un BigInteger valor a un número complejo. |
| Explicit(Decimal to Complex) |
Define una conversión explícita de un Decimal valor a un número complejo. |
| Explicit(Int128 to Complex) |
Convierte explícitamente un Int128 valor en un número complejo de precisión doble. |
| Explicit(UInt128 to Complex) |
Convierte explícitamente un UInt128 valor en un número complejo de precisión doble. |
| Implicit(BFloat16 to Complex) |
Representa un número complejo. |
| Implicit(Byte to Complex) |
Define una conversión implícita de un byte sin signo en un número complejo. |
| Implicit(Char to Complex) |
Convierte implícitamente un Char valor en un número complejo de precisión doble. |
| Implicit(Double to Complex) |
Define una conversión implícita de un número de punto flotante de precisión doble a un número complejo. |
| Implicit(Half to Complex) |
Convierte implícitamente un Half valor en un número complejo de precisión doble. |
| Implicit(Int16 to Complex) |
Define una conversión implícita de un entero de 16 bits con signo en un número complejo. |
| Implicit(Int32 to Complex) |
Define una conversión implícita de un entero de 32 bits con signo en un número complejo. |
| Implicit(Int64 to Complex) |
Define una conversión implícita de un entero de 64 bits con signo en un número complejo. |
| Implicit(IntPtr to Complex) |
Convierte implícitamente un IntPtr valor en un número complejo de precisión doble. |
| Implicit(SByte to Complex) |
Define una conversión implícita de un byte firmado en un número complejo. Esta API no es compatible con CLS. |
| Implicit(Single to Complex) |
Define una conversión implícita de un número de punto flotante de precisión sencilla a un número complejo. |
| Implicit(UInt16 to Complex) |
Define una conversión implícita de un entero de 16 bits sin signo en un número complejo. Esta API no es compatible con CLS. |
| Implicit(UInt32 to Complex) |
Define una conversión implícita de un entero de 32 bits sin signo en un número complejo. Esta API no es compatible con CLS. |
| Implicit(UInt64 to Complex) |
Define una conversión implícita de un entero de 64 bits sin signo en un número complejo. Esta API no es compatible con CLS. |
| Implicit(UIntPtr to Complex) |
Convierte implícitamente un UIntPtr valor en un número complejo de precisión doble. |
| Increment(Complex) |
Incrementa un valor. |
| Inequality(Complex, Complex) |
Devuelve un valor que indica si dos números complejos no son iguales. |
| Multiply(Complex, Complex) |
Multiplica dos números complejos especificados. |
| Multiply(Complex, Double) |
Multiplica el número complejo especificado por un número real de precisión doble especificado. |
| Multiply(Double, Complex) |
Multiplica un número real de precisión doble especificado por un número complejo especificado. |
| Subtraction(Complex, Complex) |
Resta un número complejo de otro número complejo. |
| Subtraction(Complex, Double) |
Resta un número real de precisión doble de un número complejo. |
| Subtraction(Double, Complex) |
Resta un número complejo de un número real de precisión doble. |
| UnaryNegation(Complex) |
Devuelve el inverso aditivo de un número complejo especificado. |
| UnaryPlus(Complex) |
Calcula la unaria más de un valor. |
Implementaciones de interfaz explícitas
| Nombre | Description |
|---|---|
| IAdditiveIdentity<Complex,Complex>.AdditiveIdentity |
Obtiene la identidad de suma del tipo actual. |
| IMultiplicativeIdentity<Complex,Complex>.MultiplicativeIdentity |
Obtiene la identidad multiplicativa del tipo actual. |
| INumberBase<Complex>.Abs(Complex) |
Calcula el valor absoluto de un valor. |
| INumberBase<Complex>.IsCanonical(Complex) |
Determina si un valor está en su representación canónica. |
| INumberBase<Complex>.IsZero(Complex) |
Determina si un valor es cero. |
| INumberBase<Complex>.MaxMagnitudeNumber(Complex, Complex) |
Compara dos valores con el proceso que tiene la magnitud mayor y devuelve el otro valor si una entrada es |
| INumberBase<Complex>.MinMagnitudeNumber(Complex, Complex) |
Compara dos valores con el proceso que tiene la magnitud menor y devuelve el otro valor si una entrada es |
| INumberBase<Complex>.MultiplyAddEstimate(Complex, Complex, Complex) |
Calcula una estimación de ( |
| INumberBase<Complex>.One |
Obtiene el valor |
| INumberBase<Complex>.Radix |
Obtiene la raíz, o base, para el tipo. |
| INumberBase<Complex>.TryConvertFromChecked<TOther>(TOther, Complex) |
Representa un número complejo. |
| INumberBase<Complex>.TryConvertFromSaturating<TOther>(TOther, Complex) |
Representa un número complejo. |
| INumberBase<Complex>.TryConvertFromTruncating<TOther>(TOther, Complex) |
Representa un número complejo. |
| INumberBase<Complex>.TryConvertToChecked<TOther>(Complex, TOther) |
Intenta convertir una instancia del tipo actual en otro tipo, iniciando una excepción de desbordamiento para los valores que se encuentran fuera del intervalo que se puede representar del tipo actual. |
| INumberBase<Complex>.TryConvertToSaturating<TOther>(Complex, TOther) |
Intenta convertir una instancia del tipo actual en otro tipo, saturando los valores que se encuentran fuera del intervalo que se puede representar del tipo actual. |
| INumberBase<Complex>.TryConvertToTruncating<TOther>(Complex, TOther) |
Intenta convertir una instancia del tipo actual en otro tipo, truncando los valores que se encuentran fuera del intervalo que se puede representar del tipo actual. |
| INumberBase<Complex>.Zero |
Obtiene el valor |
| ISignedNumber<Complex>.NegativeOne |
Obtiene el valor |