Udostępnij za pośrednictwem


Complex.Equals Metoda

Definicja

Zwraca wartość wskazującą, czy dwie liczby zespolone są równe.

Przeciążenia

Equals(Object)

Zwraca wartość wskazującą, czy bieżące wystąpienie i określony obiekt mają tę samą wartość.

Equals(Complex)

Zwraca wartość wskazującą, czy bieżące wystąpienie i określona liczba zespolone mają tę samą wartość.

Equals(Object)

Źródło:
Complex.cs
Źródło:
Complex.cs
Źródło:
Complex.cs

Zwraca wartość wskazującą, czy bieżące wystąpienie i określony obiekt mają tę samą wartość.

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

Parametry

obj
Object

Obiekt do porównania.

Zwraca

true obj jeśli parametr jest obiektem lub typem Complex zdolnym do niejawnej konwersji na Complex obiekt, a jego wartość jest równa bieżącemu Complex obiektowi; w przeciwnym razie false.

Uwagi

Dwie liczby zespolone są równe, jeśli ich rzeczywiste części są równe, a ich wyimaginowane części są równe. Metoda jest równoważna Equals(Object) następującemu wyrażeniu:

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)

obj Jeśli parametr nie jest obiektemComplex, ale jest to typ danych, dla którego zdefiniowano niejawną konwersję, metoda konwertuje obj na Complex obiekt, Equals(Object) którego rzeczywista część jest równa wartości obj i której wyimaginowana część jest równa zero, zanim wykona porównanie. Poniższy przykład ilustruje to, stwierdzając, że liczba zespolone i wartość zmiennoprzecinkowa o podwójnej precyzji są równe.

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.

Uwagi dotyczące wywoływania

Equals(Complex) Użyj metody z ostrożnością, ponieważ dwie wartości, które są najwyraźniej równoważne, można uznać za nierówne ze względu na różnicową precyzję rzeczywistych i wyimaginowanych składników. Problem można zaakcentować, jeśli obj należy przekonwertować na element Double przed wykonaniem porównania. Poniższy przykład porównuje liczbę zespoloną Single , której rzeczywisty składnik wydaje się być równy wartości z tej Single wartości. Jak pokazują dane wyjściowe, porównanie równości zwraca wartość 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

Zalecaną techniką jest zdefiniowanie akceptowalnego marginesu różnicy między dwiema wartościami (takimi jak .01% jednego z rzeczywistych i wyimaginowanych składników wartości) zamiast porównywać wartości równości. Jeśli wartość bezwzględna różnicy między dwiema wartościami jest mniejsza lub równa temu marginesowi, różnica może być spowodowana różnicą w dokładności i dlatego wartości mogą być równe. W poniższym przykładzie użyto tej techniki, aby porównać dwie wartości, które znaleziono w poprzednim przykładzie kodu, są nierówne. Teraz uważa, że są one równe.

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

Dotyczy

Equals(Complex)

Źródło:
Complex.cs
Źródło:
Complex.cs
Źródło:
Complex.cs

Zwraca wartość wskazującą, czy bieżące wystąpienie i określona liczba zespolone mają tę samą wartość.

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

Parametry

value
Complex

Liczba zespolone do porównania.

Zwraca

true jeśli ta liczba zespolonej i value ma tę samą wartość; w przeciwnym razie false.

Implementuje

Uwagi

Metoda Equals(Complex) zapewnia implementację IEquatable<T>Complex struktury. Działa nieco lepiej niż Equals(Object) metoda, ponieważ nie musi konwertować parametru na liczbę zespolonej.

Dwie liczby zespolone są równe, jeśli ich rzeczywiste części są równe, a ich wyimaginowane części są równe. Metoda jest równoważna Equals(Complex) następującemu wyrażeniu:

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)

Uwagi dotyczące wywoływania

Equals(Complex) Użyj metody z ostrożnością, ponieważ dwie wartości, które są najwyraźniej równoważne, można uznać za nierówne ze względu na różnicową precyzję rzeczywistych i wyimaginowanych składników. Poniższy przykład raportuje, że (3.33333, 0.142857) i (10/3, 1/7) nie są równe.

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

Zalecaną techniką jest zdefiniowanie akceptowalnego marginesu różnicy między dwiema wartościami (takimi jak .01% jednego z rzeczywistych i wyimaginowanych składników wartości) zamiast porównywać wartości równości. Jeśli wartość bezwzględna różnicy między dwiema wartościami jest mniejsza lub równa temu marginesowi, różnica może być spowodowana różnicą w precyzji, a zatem wartości mogą być równe. W poniższym przykładzie użyto tej techniki, aby porównać dwie złożone wartości, które znaleziono w poprzednim przykładzie kodu, są nierówne. Znajduje dwie liczby zespolone, które mają być równe.

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

Zobacz też

Dotyczy