Compartir a través de


Complex.Equals Método

Definición

Devuelve un valor que indica si dos números complejos son iguales.

Sobrecargas

Equals(Object)

Devuelve un valor que indica si la instancia actual y un objeto especificado tienen el mismo valor.

Equals(Complex)

Devuelve un valor que indica si la instancia actual y el número complejo especificado tienen el mismo valor.

Equals(Object)

Source:
Complex.cs
Source:
Complex.cs
Source:
Complex.cs

Devuelve un valor que indica si la instancia actual y un objeto especificado tienen el mismo valor.

public:
 override bool Equals(System::Object ^ obj);
public override bool Equals (object obj);
public override bool Equals (object? obj);
override this.Equals : obj -> bool
Public Overrides Function Equals (obj As Object) As Boolean

Parámetros

obj
Object

Objeto que se va a comparar.

Devoluciones

Es true si el parámetro obj es un objeto Complex o un tipo capaz de realizar una conversión implícita a un objeto Complex, y su valor es igual al valor del objeto Complex actual; de lo contrario, es false.

Comentarios

Dos números complejos son iguales si sus partes reales son iguales y sus partes imaginarias son iguales. El Equals(Object) método es equivalente a la siguiente expresión:

return this.Real.Equals(((Complex) value).Real) &&
       this.Imaginary.Equals(((Complex) value).Imaginary);
this.Real.Equals((value :?> Complex).Real)
&& this.Imaginary.Equals((value :?> Complex).Imaginary)
Return Me.Real.Equals(CType(value, Complex).Real) AndAlso 
       Me.Imaginary.Equals(CType(value, Complex).Imaginary)

Si el obj parámetro no es un Complex objeto, pero es un tipo de datos para el que se define una conversión implícita, el Equals(Object) método convierte obj en un Complex objeto cuya parte real es igual al valor de obj y cuya parte imaginaria es igual a cero antes de realizar la comparación. En el ejemplo siguiente se muestra esto mediante la búsqueda de que un número complejo y un valor de punto flotante de precisión doble son iguales.

double n1 = 16.33;
System.Numerics.Complex c1 =
       new System.Numerics.Complex(16.33, 0);
Console.WriteLine(c1.Equals(n1));               // Returns true.
let n1 = 16.33;
let c1 = System.Numerics.Complex(16.33, 0)
printfn $"{c1.Equals n1}" // Returns true.
Dim n1 As Double = 16.33
Dim c1 As New System.Numerics.Complex(16.33, 0)
Console.WriteLine(c1.Equals(n1))                ' Returns True.

Notas a los autores de las llamadas

Utilice el Equals(Complex) método con precaución, ya que dos valores que aparentemente son equivalentes se pueden considerar desiguales debido a la precisión diferente de sus componentes reales e imaginarios. El problema se puede acentuar si obj se debe convertir en un Double antes de realizar la comparación. En el ejemplo siguiente se compara un número complejo cuyo componente real parece ser igual a un Single valor con ese Single valor. Como se muestra en la salida, la comparación de igualdad devuelve False.

using System;
using System.Numerics;

public class Example
{
   public static void Main()
   {
      float n1 = 1.430718e-12f;
      Complex c1 = new Complex(1.430718e-12, 0);
      Console.WriteLine("{0} = {1}: {2}", c1, n1, c1.Equals(n1));
   }
}
// The example displays the following output:
//       (1.430718E-12, 0) = 1.430718E-12: False
open System.Numerics

let n1 = 1.430718e-12f
let c1 = Complex(1.430718e-12, 0);
printfn $"{c1} = {n1}: {c1.Equals n1}"
// The example displays the following output:
//       (1.430718E-12, 0) = 1.430718E-12: False
Imports System.Numerics

Module Example
   Public Sub Main()
      Dim n1 As Single = 1.430718e-12
      Dim c1 As New Complex(1.430718e-12, 0)
      Console.WriteLine("{0} = {1}: {2}", c1, n1, c1.Equals(n1))
   End Sub
End Module
' The example displays the following output:
'       (1.430718E-12, 0) = 1.430718E-12: False

Una técnica recomendada es definir un margen aceptable de diferencia entre los dos valores (como .01 % de uno de los componentes reales e imaginarios de los valores) en lugar de comparar los valores de igualdad. Si el valor absoluto de la diferencia entre los dos valores es menor o igual que ese margen, es probable que la diferencia se deba a una diferencia de precisión y, por lo tanto, es probable que los valores sean iguales. En el ejemplo siguiente se usa esta técnica para comparar los dos valores que el ejemplo de código anterior encontró que no es igual. Ahora los encuentra iguales.

using System.Numerics;

public class Example
{
   public static void Main()
   {
      float n1 = 1.430718e-12f;
      Complex c1 = new Complex(1.430718e-12, 0);
      double difference = .0001;

      // Compare the values
      bool result = (Math.Abs(c1.Real - n1) <= c1.Real * difference) &
                    c1.Imaginary == 0;
      Console.WriteLine("{0} = {1}: {2}", c1, n1, result);
   }
}
// The example displays the following output:
//       (1.430718E-12, 0) = 1.430718E-12: True
open System.Numerics

let n1 = 1.430718e-12f
let c1 = Complex(1.430718e-12, 0);
let difference = 0.0001f;

// Compare the values
let result = (abs (c1.Real - float n1) <= c1.Real * float difference) && c1.Imaginary = 0;
printfn $"{c1} = {n1}: {result}"
// The example displays the following output:
//       (1.430718E-12, 0) = 1.430718E-12: True
Imports System.Numerics

Module Example
   Public Sub Main()
      Dim n1 As Single = 1.430718e-12
      Dim c1 As New Complex(1.430718e-12, 0)
      Dim difference As Double = .0001
      
      ' Compare the values
      Dim result As Boolean = (Math.Abs(c1.Real - n1) <= c1.Real * difference) And
                              c1.Imaginary = 0
      Console.WriteLine("{0} = {1}: {2}", c1, n1, result)       
   End Sub
End Module
' The example displays the following output:
'       (1.430718E-12, 0) = 1.430718E-12: True

Se aplica a

Equals(Complex)

Source:
Complex.cs
Source:
Complex.cs
Source:
Complex.cs

Devuelve un valor que indica si la instancia actual y el número complejo especificado tienen el mismo valor.

public:
 virtual bool Equals(System::Numerics::Complex value);
public bool Equals (System.Numerics.Complex value);
override this.Equals : System.Numerics.Complex -> bool
Public Function Equals (value As Complex) As Boolean

Parámetros

value
Complex

Número complejo que se va a comparar.

Devoluciones

Es true si este número complejo y value tienen el mismo valor; de lo contrario, es false.

Implementaciones

Comentarios

El Equals(Complex) método proporciona la IEquatable<T> implementación de la Complex estructura. Funciona ligeramente mejor que Equals(Object) el método porque no tiene que convertir su parámetro en un número complejo.

Dos números complejos son iguales si sus partes reales son iguales y sus partes imaginarias son iguales. El Equals(Complex) método es equivalente a la siguiente expresión:

return this.Real.Equals(value) && this.Imaginary.Equals(value);
this.Real.Equals value && this.Imaginary.Equals value
Return Me.Real.Equals(value.Real) AndAlso Me.Imaginary.Equals(value.Imaginary)

Notas a los autores de las llamadas

Utilice el Equals(Complex) método con precaución, ya que dos valores que aparentemente son equivalentes se pueden considerar desiguales debido a la precisión diferente de sus componentes reales e imaginarios. En el ejemplo siguiente se informa de que (3.33333, 0.142857) y (10/3, 1/7) no son iguales.

System.Numerics.Complex c1 = new System.Numerics.Complex(3.33333, .142857);
System.Numerics.Complex c2 = new System.Numerics.Complex(10/3.0, 1.0/7);
Console.WriteLine("{0} = {1}: {2}", c1, c2, c1.Equals(c2));
// The example displays the following output:
//    (3.33333, 0.142857) = (3.33333333333333, 0.142857142857143): False
    let c1 = System.Numerics.Complex(3.33333, 0.142857)
    let c2 = System.Numerics.Complex(10. / 3., 1. / 7.)
    printfn $"{c1} = {c2}: {c1.Equals c2}"
// The example displays the following output:
//    (3.33333, 0.142857) = (3.33333333333333, 0.142857142857143): False
Dim c1 As New System.Numerics.Complex(3.33333, .142857)
Dim c2 As New System.Numerics.Complex(10/3, 1/7)
Console.WriteLine("{0} = {1}: {2}", c1, c2, c1.Equals(c2))       
' The example displays the following output:
'    (3.33333, 0.142857) = (3.33333333333333, 0.142857142857143): False

Una técnica recomendada es definir un margen aceptable de diferencia entre los dos valores (como .01 % de uno de los componentes reales e imaginarios de los valores) en lugar de comparar los valores de igualdad. Si el valor absoluto de la diferencia entre los dos valores es menor o igual que ese margen, es probable que la diferencia se deba a una diferencia de precisión y, por lo tanto, es probable que los valores sean iguales. En el ejemplo siguiente se usa esta técnica para comparar los dos valores complejos que el ejemplo de código anterior encontró que no era igual. Busca que los dos números complejos sean iguales.

System.Numerics.Complex c1 = new System.Numerics.Complex(3.33333, .142857);
System.Numerics.Complex c2 = new System.Numerics.Complex(10/3.0, 1.0/7);
double difference = .0001;

// Compare the values
bool result = (Math.Abs(c1.Real - c2.Real) <= c1.Real * difference) &
              (Math.Abs(c1.Imaginary - c2.Imaginary) <= c1.Imaginary * difference);
Console.WriteLine("{0} = {1}: {2}", c1, c2, result);
// The example displays the following output:
//    (3.33333, 0.142857) = (3.33333333333333, 0.142857142857143): True
    let c1 = System.Numerics.Complex(3.33333, 0.142857)
    let c2 = System.Numerics.Complex(10. / 3., 1. / 7.)
    let difference = 0.0001

    // Compare the values
    let result =
        (Math.Abs(c1.Real - c2.Real) <= c1.Real * difference)
        && (Math.Abs(c1.Imaginary - c2.Imaginary) <= c1.Imaginary * difference)

    printfn $"{c1} = {c2}: {result}"
// The example displays the following output:
//    (3.33333, 0.142857) = (3.33333333333333, 0.142857142857143): True
Dim c1 As New System.Numerics.Complex(3.33333, .142857)
Dim c2 As New System.Numerics.Complex(10/3.0, 1.0/7)
Dim difference As Double = .0001

' Compare the values
Dim result As Boolean = (Math.Abs(c1.Real - c2.Real) <= c1.Real * difference) And
                        (Math.Abs(c1.Imaginary - c2.Imaginary) <= c1.Imaginary * difference)
Console.WriteLine("{0} = {1}: {2}", c1, c2, result)       
' The example displays the following output:
'    (3.33333, 0.142857) = (3.33333333333333, 0.142857142857143): True

Consulte también

Se aplica a