次の方法で共有


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);
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オブジェクトではなく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.
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.

注意 (呼び出し元)

実数成分と虚数成分の 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
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

推奨される手法の 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
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

適用対象

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

推奨される手法の 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
    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

こちらもご覧ください

適用対象