Complex.Equals メソッド

定義

2 つの複素数が等しいかどうかを示す値を返します。

オーバーロード

Equals(Object)

現在のインスタンスの値と指定されたオブジェクトの値が等しいかどうかを示す値を返します。

Equals(Complex)

現在のインスタンスの値と指定した複素数の値が等しいかどうかを示す値を返します。

Equals(Object)

ソース:
Complex.cs
ソース:
Complex.cs
ソース:
Complex.cs

現在のインスタンスの値と指定されたオブジェクトの値が等しいかどうかを示す値を返します。

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

パラメーター

obj
Object

比較対象のオブジェクト。

戻り値

obj パラメーターが Complex オブジェクトであるか Complex オブジェクトに暗黙的に変換できる型であり、その値が現在の Complex オブジェクトの値と等しい場合は true。それ以外の場合は false

注釈

実数が等しく、虚数部が等しい場合、2 つの複素数は等しくなります。 メソッドは Equals(Object) 、次の式と同じです。

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)

パラメーターがobjオブジェクトではなくComplex、暗黙的な変換が定義されているデータ型である場合、メソッドは、Equals(Object)実際の部分が のobj値と等しく、虚数部分が 0 に等しいオブジェクトに変換objComplexしてから比較を実行します。 次の例は、複素数と倍精度浮動小数点値が等しいことを検出することによってこれを示しています。

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.

注意 (呼び出し元)

実際の Equals(Complex) 成分と虚数成分の精度が異なるため、明らかに等価な 2 つの値は等しくないと見なすことができるので、 メソッドは注意して使用してください。 比較を実行する前に にDouble変換する必要がある場合objは、問題を強調できます。 次の例では、実際のコンポーネントが値とその値とSingle等しいように見える複素数をSingle比較します。 出力に示されているように、等価性の比較では が返されます 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

推奨される手法の 1 つは、値の等価性を比較する代わりに、2 つの値 (値の実数と虚数成分の 1 つの .01% など) の差の許容できるマージンを定義することです。 2 つの値の差の絶対値がそのマージン以下の場合、その差は精度の差が原因である可能性が高いため、値は等しくなる可能性があります。 次の例では、この手法を使用して、前のコード例で等しくないことがわかった 2 つの値を比較します。 これで、それらが等しいことがわかります。

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

適用対象

Equals(Complex)

ソース:
Complex.cs
ソース:
Complex.cs
ソース:
Complex.cs

現在のインスタンスの値と指定した複素数の値が等しいかどうかを示す値を返します。

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

パラメーター

value
Complex

比較対象の複素数。

戻り値

この複素数の値と value の値が等しい場合は true。それ以外の場合は false

実装

注釈

メソッドは Equals(Complex) 、 構造体の IEquatable<T> 実装を Complex 提供します。 パラメーターを複素数に変換する必要がないため、メソッドよりも Equals(Object) 若干優れたパフォーマンスが得られます。

実数が等しく、虚数部が等しい場合、2 つの複素数は等しくなります。 メソッドは Equals(Complex) 、次の式と同じです。

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

注意 (呼び出し元)

実際の Equals(Complex) 成分と虚数成分の精度が異なるため、明らかに等価な 2 つの値は等しくないと見なすことができるので、 メソッドは注意して使用してください。 次の例では、 と (10/3, 1/7) が等しくないことを(3.33333, 0.142857)報告します。

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

推奨される手法の 1 つは、値の等価性を比較する代わりに、2 つの値 (値の実数と虚数成分の 1 つの .01% など) の差の許容できるマージンを定義することです。 2 つの値の差の絶対値がその余白以下の場合、その差は精度の差が原因である可能性が高いため、値は等しくなる可能性があります。 次の例では、この手法を使用して、前のコード例で等しくないことがわかった 2 つの複雑な値を比較します。 2 つの複素数が等しいことがわかります。

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

こちらもご覧ください

適用対象