Complex.Equals Methode

Definition

Gibt einen Wert zurück, der angibt, ob zwei komplexe Zahlen gleich sind.

Überlädt

Equals(Object)

Gibt einen Wert zurück, der angibt, ob die aktuelle Instanz und ein angegebenes Objekt über den gleichen Wert verfügen.

Equals(Complex)

Gibt einen Wert zurück, der angibt, ob die aktuelle Instanz und eine angegebene komplexe Zahl den gleichen Wert haben.

Equals(Object)

Gibt einen Wert zurück, der angibt, ob die aktuelle Instanz und ein angegebenes Objekt über den gleichen Wert verfügen.

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

Parameter

obj
Object

Das zu vergleichende Objekt.

Gibt zurück

true, wenn der obj-Parameter ein Complex-Objekt oder ein Typ ist, der die implizite Konvertierung in ein Complex-Objekt unterstützt, und der Wert gleich dem aktuellen Complex-Objekt ist, andernfalls false.

Hinweise

Zwei komplexe Zahlen sind gleich, wenn ihre realen Teile gleich und ihre imaginären Teile gleich sind. Die Equals(Object) -Methode entspricht dem folgenden Ausdruck:

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

Wenn der obj Parameter kein Complex Objekt, sondern ein Datentyp ist, für den eine implizite Konvertierung definiert ist, konvertiert obj die Equals(Object) Methode in ein Complex Objekt, dessen realer Teil gleich dem Wert von obj ist und dessen imaginäre Teil gleich 0 ist, bevor der Vergleich durchgeführt wird. Im folgenden Beispiel wird dies veranschaulicht, indem festgestellt wird, dass eine komplexe Zahl und ein Gleitkommawert mit doppelter Genauigkeit gleich sind.

double n1 = 16.33;
System.Numerics.Complex c1 =
       new System.Numerics.Complex(16.33, 0);
Console.WriteLine(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.

Hinweise für Aufrufer

Verwenden Sie die Equals(Complex) Methode mit Vorsicht, da zwei Scheinbar gleichwertige Werte aufgrund der unterschiedlichen Genauigkeit ihrer realen und imaginären Komponenten als ungleich betrachtet werden können. Das Problem kann hervorgehoben werden, wenn obj vor dem Durchführen des Vergleichs in eine Double konvertiert werden muss. Im folgenden Beispiel wird eine komplexe Zahl verglichen, deren reale Komponente mit einem Single Wert Single gleich zu sein scheint. Wie die Ausgabe zeigt, gibt der Vergleich für Gleichheit zurück 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
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

Eine empfohlene Verfahren besteht darin, eine akzeptable Rand Unterschied zwischen den beiden Werten definieren (z. B. 01 % einer der Werte reellen und imaginären Komponenten) statt Vergleichen der Werte hinsichtlich ihrer Gleichheit. Wenn der absolute Wert der Differenz zwischen den beiden Werten kleiner oder gleich diesem Rand ist, ist die Differenz wahrscheinlich auf eine Differenz in der Genauigkeit zurückzuführen, und daher sind die Werte wahrscheinlich gleich. Im folgenden Beispiel wird dieses Verfahren verwendet, um die beiden Werte zu vergleichen, die im vorherigen Codebeispiel als ungleich befunden wurden. Sie findet nun, dass sie gleich sind.

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
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

Gilt für:

Equals(Complex)

Gibt einen Wert zurück, der angibt, ob die aktuelle Instanz und eine angegebene komplexe Zahl den gleichen Wert haben.

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

Parameter

value
Complex

Die zu vergleichende komplexe Zahl.

Gibt zurück

true, wenn die komplexe Zahl und value den gleichen Wert haben, andernfalls false.

Implementiert

Hinweise

Die Equals(Complex) -Methode stellt die IEquatable<T> -Implementierung für die Complex -Struktur bereit. Die Leistung ist etwas besser als Equals(Object) die Methode, da sie ihren Parameter nicht in eine komplexe Zahl konvertieren muss.

Zwei komplexe Zahlen sind gleich, wenn ihre realen Teile gleich und ihre imaginären Teile gleich sind. Die Equals(Complex) -Methode entspricht dem folgenden Ausdruck:

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

Hinweise für Aufrufer

Verwenden Sie die Equals(Complex) Methode mit Vorsicht, da zwei Scheinbar gleichwertige Werte aufgrund der unterschiedlichen Genauigkeit ihrer realen und imaginären Komponenten als ungleich betrachtet werden können. Im folgenden Beispiel wird gemeldet, dass (3.33333, 0.142857) und (10/3, 1/7) ungleich sind.

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
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

Eine empfohlene Verfahren besteht darin, eine akzeptable Rand Unterschied zwischen den beiden Werten definieren (z. B. 01 % einer der Werte reellen und imaginären Komponenten) statt Vergleichen der Werte hinsichtlich ihrer Gleichheit. Wenn der absolute Wert der Differenz zwischen den beiden Werten kleiner oder gleich diesem Rand ist, ist die Differenz wahrscheinlich auf eine Differenz in der Genauigkeit zurückzuführen, und daher sind die Werte wahrscheinlich gleich. Im folgenden Beispiel wird dieses Verfahren verwendet, um die beiden komplexen Werte zu vergleichen, die im vorherigen Codebeispiel als ungleich befunden wurden. Es findet, dass die beiden komplexen Zahlen gleich sind.

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
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

Weitere Informationen

Gilt für: