Поделиться через


Complex.Equals Метод

Определение

Возвращает значение, указывающее, равны ли два комплексных числа.

Перегрузки

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

Объект для сравнения.

Возвращаемое значение

Значение true, если параметр obj является объектом Complex или типом, поддерживающим неявное преобразование в объект Complex, а его значение равняется текущему объекту Complex; в противном случае — значение false.

Комментарии

Два комплексных числа равны, если их реальные части равны, а их мнимые части равны. Метод 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 является объектом, но это тип данных, для которого определено неявное преобразование, метод преобразуется obj в Complex объект, Equals(Object) реальная часть которого равна значению obj и мнимая часть которого равна нулю перед выполнением сравнения. В следующем примере показано, что комплексное число и значение двойной точности с плавающей запятой равны.

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) Используйте метод с осторожностью, так как два значения, которые по-видимому эквивалентны, могут считаться неравными из-за разной точности их реальных и мнимых компонентов. Проблема может быть подчеркнута, если obj ее необходимо преобразовать Double в перед выполнением сравнения. В следующем примере сравнивается комплексное число, реальный компонент которого кажется равным 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

Один из рекомендуемых методов заключается в определении приемлемой разницы между двумя значениями (например, 0,01 % от одного из реальных и мнимых компонентов значений) вместо сравнения значений на равенство. Если абсолютное значение разницы между двумя значениями меньше или равно этой разнице, разница, скорее всего, будет вызвана разницей в точности и, следовательно, значения, скорее всего, будут равны. В следующем примере этот метод используется для сравнения двух значений, которые в предыдущем примере кода были признаны неравными. Теперь он считает их равными.

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

Комплексное число для сравнения.

Возвращаемое значение

Значение true, если значения комплексного числа и value совпадают; в противном случае — значение false.

Реализации

Комментарии

Метод Equals(Complex) предоставляет реализацию IEquatable<T> структуры Complex . Он работает немного лучше, чем Equals(Object) метод , так как ему не нужно преобразовывать свой параметр в комплексное число.

Два комплексных числа равны, если их реальные части равны, а их мнимые части равны. Метод 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) Используйте метод с осторожностью, так как два значения, которые по-видимому эквивалентны, могут считаться неравными из-за разной точности их реальных и мнимых компонентов. В следующем примере сообщается, что (3.33333, 0.142857) и (10/3, 1/7) не равны.

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

Один из рекомендуемых методов заключается в определении приемлемой разницы между двумя значениями (например, 0,01 % от одного из реальных и мнимых компонентов значений) вместо сравнения значений на равенство. Если абсолютное значение разницы между двумя значениями меньше или равно этой разнице, разница, скорее всего, будет вызвана разницей в точности и, следовательно, значения, скорее всего, будут равны. В следующем примере этот метод используется для сравнения двух сложных значений, которые в предыдущем примере кода были признаны неравными. Он находит два комплексных числа равными.

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

См. также раздел

Применяется к