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