Bagikan melalui


Complex.Equals Metode

Definisi

Mengembalikan nilai yang menunjukkan apakah dua bilangan kompleks sama.

Overload

Equals(Object)

Mengembalikan nilai yang menunjukkan apakah instans saat ini dan objek tertentu memiliki nilai yang sama.

Equals(Complex)

Mengembalikan nilai yang menunjukkan apakah instans saat ini dan bilangan kompleks tertentu memiliki nilai yang sama.

Equals(Object)

Sumber:
Complex.cs
Sumber:
Complex.cs
Sumber:
Complex.cs

Mengembalikan nilai yang menunjukkan apakah instans saat ini dan objek tertentu memiliki nilai yang sama.

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

Objek yang akan dibandingkan.

Mengembalikan

true obj jika parameter adalah Complex objek atau jenis yang mampu konversi implisit ke Complex objek, dan nilainya sama dengan objek saat iniComplex; jika tidak, false.

Keterangan

Dua bilangan kompleks sama jika bagian aslinya sama dan bagian imajinernya sama. Metode Equals(Object) ini setara dengan ekspresi berikut:

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 Jika parameter bukan Complex objek, tetapi ini adalah jenis data yang konversi implisitnya obj ditentukan, Equals(Object) metode akan dikonversi ke Complex objek yang bagian aslinya sama dengan nilai obj dan yang bagian imajinernya sama dengan nol sebelum melakukan perbandingan. Contoh berikut mengilustrasikan ini dengan menemukan bahwa angka kompleks dan nilai floating-point presisi ganda sama.

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.

Catatan Bagi Pemanggil

Gunakan metode dengan Equals(Complex) hati-hati, karena dua nilai yang tampaknya setara dapat dianggap tidak sama karena presisi yang berbeda dari komponen nyata dan imajiner mereka. Masalah dapat diaksenuasi jika obj harus dikonversi ke Double sebelum melakukan perbandingan. Contoh berikut membandingkan bilangan kompleks yang komponen nyatanya tampaknya sama Single dengan nilai dengan nilai tersebut Single . Seperti yang ditunjukkan oleh output, perbandingan untuk kesetaraan Falsemengembalikan .

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

Salah satu teknik yang direkomendasikan adalah menentukan margin perbedaan yang dapat diterima antara dua nilai (seperti .01% dari salah satu komponen nyata dan imajiner nilai) alih-alih membandingkan nilai untuk kesetaraan. Jika nilai absolut perbedaan antara kedua nilai kurang dari atau sama dengan margin tersebut, perbedaannya kemungkinan disebabkan oleh perbedaan presisi dan, oleh karena itu, nilainya cenderung sama. Contoh berikut menggunakan teknik ini untuk membandingkan dua nilai yang ditemukan contoh kode sebelumnya tidak sama. Sekarang menemukan mereka sama.

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

Berlaku untuk

Equals(Complex)

Sumber:
Complex.cs
Sumber:
Complex.cs
Sumber:
Complex.cs

Mengembalikan nilai yang menunjukkan apakah instans saat ini dan bilangan kompleks tertentu memiliki nilai yang sama.

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

Bilangan kompleks untuk dibandingkan.

Mengembalikan

true jika angka kompleks ini dan value memiliki nilai yang sama; jika tidak, false.

Penerapan

Keterangan

Metode ini Equals(Complex) menyediakan IEquatable<T> implementasi untuk Complex struktur. Performanya sedikit lebih baik daripada Equals(Object) metode karena tidak harus mengonversi parameternya menjadi bilangan kompleks.

Dua bilangan kompleks sama jika bagian aslinya sama dan bagian imajinernya sama. Metode Equals(Complex) ini setara dengan ekspresi berikut:

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)

Catatan Bagi Pemanggil

Gunakan metode dengan Equals(Complex) hati-hati, karena dua nilai yang tampaknya setara dapat dianggap tidak sama karena presisi yang berbeda dari komponen nyata dan imajiner mereka. Contoh berikut melaporkan bahwa (3.33333, 0.142857) dan (10/3, 1/7) tidak sama.

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

Salah satu teknik yang direkomendasikan adalah menentukan margin perbedaan yang dapat diterima antara dua nilai (seperti .01% dari salah satu komponen nyata dan imajiner nilai) alih-alih membandingkan nilai untuk kesetaraan. Jika nilai absolut perbedaan antara kedua nilai kurang dari atau sama dengan margin tersebut, perbedaannya kemungkinan disebabkan oleh perbedaan presisi, dan, oleh karena itu, nilainya cenderung sama. Contoh berikut menggunakan teknik ini untuk membandingkan dua nilai kompleks yang ditemukan contoh kode sebelumnya tidak sama. Ini menemukan dua bilangan kompleks sama.

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

Lihat juga

Berlaku untuk