Complex 구조체

정의

복소수를 나타냅니다.

public value class Complex : IEquatable<System::Numerics::Complex>, IFormattable
public value class Complex : IEquatable<System::Numerics::Complex>, IParsable<System::Numerics::Complex>, ISpanParsable<System::Numerics::Complex>, IUtf8SpanParsable<System::Numerics::Complex>, System::Numerics::IAdditionOperators<System::Numerics::Complex, System::Numerics::Complex, System::Numerics::Complex>, System::Numerics::IAdditiveIdentity<System::Numerics::Complex, System::Numerics::Complex>, System::Numerics::IDecrementOperators<System::Numerics::Complex>, System::Numerics::IDivisionOperators<System::Numerics::Complex, System::Numerics::Complex, System::Numerics::Complex>, System::Numerics::IEqualityOperators<System::Numerics::Complex, System::Numerics::Complex, bool>, System::Numerics::IIncrementOperators<System::Numerics::Complex>, System::Numerics::IMultiplicativeIdentity<System::Numerics::Complex, System::Numerics::Complex>, System::Numerics::IMultiplyOperators<System::Numerics::Complex, System::Numerics::Complex, System::Numerics::Complex>, System::Numerics::INumberBase<System::Numerics::Complex>, System::Numerics::ISignedNumber<System::Numerics::Complex>, System::Numerics::ISubtractionOperators<System::Numerics::Complex, System::Numerics::Complex, System::Numerics::Complex>, System::Numerics::IUnaryNegationOperators<System::Numerics::Complex, System::Numerics::Complex>, System::Numerics::IUnaryPlusOperators<System::Numerics::Complex, System::Numerics::Complex>
public value class Complex : IEquatable<System::Numerics::Complex>, IParsable<System::Numerics::Complex>, ISpanParsable<System::Numerics::Complex>, System::Numerics::IAdditionOperators<System::Numerics::Complex, System::Numerics::Complex, System::Numerics::Complex>, System::Numerics::IAdditiveIdentity<System::Numerics::Complex, System::Numerics::Complex>, System::Numerics::IDecrementOperators<System::Numerics::Complex>, System::Numerics::IDivisionOperators<System::Numerics::Complex, System::Numerics::Complex, System::Numerics::Complex>, System::Numerics::IEqualityOperators<System::Numerics::Complex, System::Numerics::Complex, bool>, System::Numerics::IIncrementOperators<System::Numerics::Complex>, System::Numerics::IMultiplicativeIdentity<System::Numerics::Complex, System::Numerics::Complex>, System::Numerics::IMultiplyOperators<System::Numerics::Complex, System::Numerics::Complex, System::Numerics::Complex>, System::Numerics::INumberBase<System::Numerics::Complex>, System::Numerics::ISignedNumber<System::Numerics::Complex>, System::Numerics::ISubtractionOperators<System::Numerics::Complex, System::Numerics::Complex, System::Numerics::Complex>, System::Numerics::IUnaryNegationOperators<System::Numerics::Complex, System::Numerics::Complex>, System::Numerics::IUnaryPlusOperators<System::Numerics::Complex, System::Numerics::Complex>
public struct Complex : IEquatable<System.Numerics.Complex>, IFormattable
public readonly struct Complex : IEquatable<System.Numerics.Complex>, IParsable<System.Numerics.Complex>, ISpanParsable<System.Numerics.Complex>, IUtf8SpanParsable<System.Numerics.Complex>, System.Numerics.IAdditionOperators<System.Numerics.Complex,System.Numerics.Complex,System.Numerics.Complex>, System.Numerics.IAdditiveIdentity<System.Numerics.Complex,System.Numerics.Complex>, System.Numerics.IDecrementOperators<System.Numerics.Complex>, System.Numerics.IDivisionOperators<System.Numerics.Complex,System.Numerics.Complex,System.Numerics.Complex>, System.Numerics.IEqualityOperators<System.Numerics.Complex,System.Numerics.Complex,bool>, System.Numerics.IIncrementOperators<System.Numerics.Complex>, System.Numerics.IMultiplicativeIdentity<System.Numerics.Complex,System.Numerics.Complex>, System.Numerics.IMultiplyOperators<System.Numerics.Complex,System.Numerics.Complex,System.Numerics.Complex>, System.Numerics.INumberBase<System.Numerics.Complex>, System.Numerics.ISignedNumber<System.Numerics.Complex>, System.Numerics.ISubtractionOperators<System.Numerics.Complex,System.Numerics.Complex,System.Numerics.Complex>, System.Numerics.IUnaryNegationOperators<System.Numerics.Complex,System.Numerics.Complex>, System.Numerics.IUnaryPlusOperators<System.Numerics.Complex,System.Numerics.Complex>
public readonly struct Complex : IEquatable<System.Numerics.Complex>, IFormattable
public readonly struct Complex : IEquatable<System.Numerics.Complex>, IParsable<System.Numerics.Complex>, ISpanParsable<System.Numerics.Complex>, System.Numerics.IAdditionOperators<System.Numerics.Complex,System.Numerics.Complex,System.Numerics.Complex>, System.Numerics.IAdditiveIdentity<System.Numerics.Complex,System.Numerics.Complex>, System.Numerics.IDecrementOperators<System.Numerics.Complex>, System.Numerics.IDivisionOperators<System.Numerics.Complex,System.Numerics.Complex,System.Numerics.Complex>, System.Numerics.IEqualityOperators<System.Numerics.Complex,System.Numerics.Complex,bool>, System.Numerics.IIncrementOperators<System.Numerics.Complex>, System.Numerics.IMultiplicativeIdentity<System.Numerics.Complex,System.Numerics.Complex>, System.Numerics.IMultiplyOperators<System.Numerics.Complex,System.Numerics.Complex,System.Numerics.Complex>, System.Numerics.INumberBase<System.Numerics.Complex>, System.Numerics.ISignedNumber<System.Numerics.Complex>, System.Numerics.ISubtractionOperators<System.Numerics.Complex,System.Numerics.Complex,System.Numerics.Complex>, System.Numerics.IUnaryNegationOperators<System.Numerics.Complex,System.Numerics.Complex>, System.Numerics.IUnaryPlusOperators<System.Numerics.Complex,System.Numerics.Complex>
[System.Serializable]
public struct Complex : IEquatable<System.Numerics.Complex>, IFormattable
type Complex = struct
    interface IFormattable
type Complex = struct
    interface IFormattable
    interface IParsable<Complex>
    interface ISpanFormattable
    interface ISpanParsable<Complex>
    interface IAdditionOperators<Complex, Complex, Complex>
    interface IAdditiveIdentity<Complex, Complex>
    interface IDecrementOperators<Complex>
    interface IDivisionOperators<Complex, Complex, Complex>
    interface IEqualityOperators<Complex, Complex, bool>
    interface IIncrementOperators<Complex>
    interface IMultiplicativeIdentity<Complex, Complex>
    interface IMultiplyOperators<Complex, Complex, Complex>
    interface INumberBase<Complex>
    interface IUtf8SpanFormattable
    interface IUtf8SpanParsable<Complex>
    interface ISubtractionOperators<Complex, Complex, Complex>
    interface IUnaryNegationOperators<Complex, Complex>
    interface IUnaryPlusOperators<Complex, Complex>
    interface ISignedNumber<Complex>
type Complex = struct
    interface IFormattable
    interface IParsable<Complex>
    interface ISpanFormattable
    interface ISpanParsable<Complex>
    interface IUtf8SpanFormattable
    interface IUtf8SpanParsable<Complex>
    interface IAdditionOperators<Complex, Complex, Complex>
    interface IAdditiveIdentity<Complex, Complex>
    interface IDecrementOperators<Complex>
    interface IDivisionOperators<Complex, Complex, Complex>
    interface IEqualityOperators<Complex, Complex, bool>
    interface IIncrementOperators<Complex>
    interface IMultiplicativeIdentity<Complex, Complex>
    interface IMultiplyOperators<Complex, Complex, Complex>
    interface INumberBase<Complex>
    interface ISubtractionOperators<Complex, Complex, Complex>
    interface IUnaryNegationOperators<Complex, Complex>
    interface IUnaryPlusOperators<Complex, Complex>
    interface ISignedNumber<Complex>
type Complex = struct
    interface IFormattable
    interface IParsable<Complex>
    interface ISpanFormattable
    interface ISpanParsable<Complex>
    interface IAdditionOperators<Complex, Complex, Complex>
    interface IAdditiveIdentity<Complex, Complex>
    interface IDecrementOperators<Complex>
    interface IDivisionOperators<Complex, Complex, Complex>
    interface IEqualityOperators<Complex, Complex, bool>
    interface IIncrementOperators<Complex>
    interface IMultiplicativeIdentity<Complex, Complex>
    interface IMultiplyOperators<Complex, Complex, Complex>
    interface INumberBase<Complex>
    interface ISubtractionOperators<Complex, Complex, Complex>
    interface IUnaryNegationOperators<Complex, Complex>
    interface IUnaryPlusOperators<Complex, Complex>
    interface ISignedNumber<Complex>
type Complex = struct
    interface IFormattable
    interface IParsable<Complex>
    interface ISpanFormattable
    interface ISpanParsable<Complex>
    interface IAdditionOperators<Complex, Complex, Complex>
    interface IAdditiveIdentity<Complex, Complex>
    interface IDecrementOperators<Complex>
    interface IDivisionOperators<Complex, Complex, Complex>
    interface IEqualityOperators<Complex, Complex, bool>
    interface IIncrementOperators<Complex>
    interface IMultiplicativeIdentity<Complex, Complex>
    interface IMultiplyOperators<Complex, Complex, Complex>
    interface INumberBase<Complex>
    interface ISubtractionOperators<Complex, Complex, Complex>
    interface IUnaryNegationOperators<Complex, Complex>
    interface IUnaryPlusOperators<Complex, Complex>
    interface IUtf8SpanFormattable
    interface IUtf8SpanParsable<Complex>
    interface ISignedNumber<Complex>
[<System.Serializable>]
type Complex = struct
    interface IFormattable
Public Structure Complex
Implements IEquatable(Of Complex), IFormattable
Public Structure Complex
Implements IAdditionOperators(Of Complex, Complex, Complex), IAdditiveIdentity(Of Complex, Complex), IDecrementOperators(Of Complex), IDivisionOperators(Of Complex, Complex, Complex), IEqualityOperators(Of Complex, Complex, Boolean), IEquatable(Of Complex), IIncrementOperators(Of Complex), IMultiplicativeIdentity(Of Complex, Complex), IMultiplyOperators(Of Complex, Complex, Complex), INumberBase(Of Complex), IParsable(Of Complex), ISignedNumber(Of Complex), ISpanParsable(Of Complex), ISubtractionOperators(Of Complex, Complex, Complex), IUnaryNegationOperators(Of Complex, Complex), IUnaryPlusOperators(Of Complex, Complex), IUtf8SpanParsable(Of Complex)
Public Structure Complex
Implements IAdditionOperators(Of Complex, Complex, Complex), IAdditiveIdentity(Of Complex, Complex), IDecrementOperators(Of Complex), IDivisionOperators(Of Complex, Complex, Complex), IEqualityOperators(Of Complex, Complex, Boolean), IEquatable(Of Complex), IIncrementOperators(Of Complex), IMultiplicativeIdentity(Of Complex, Complex), IMultiplyOperators(Of Complex, Complex, Complex), INumberBase(Of Complex), IParsable(Of Complex), ISignedNumber(Of Complex), ISpanParsable(Of Complex), ISubtractionOperators(Of Complex, Complex, Complex), IUnaryNegationOperators(Of Complex, Complex), IUnaryPlusOperators(Of Complex, Complex)
상속
Complex
특성
구현

설명

복소수는 실수 부분과 허수 부분으로 구성된 숫자입니다. 복소수 z는 일반적으로 형식z = x + yi으로 작성됩니다. 여기서 xy는 실수이고, i는 i 2 = -1 속성을 가진 허수 단위입니다. 복소수의 실제 부분은 x표시되고, 복소수의 허수 부분은 y표시됩니다.

이 형식은 Complex 복소수를 인스턴스화하고 조작할 때 카티전 좌표계(실제, 가상)를 사용합니다. 복소수는 복소수 평면이라고 하는 2차원 좌표계의 한 지점으로 나타낼 수 있습니다. 복소수의 실제 부분은 x축(가로 축)에 배치되고 가상 부분은 y축(세로 축)에 배치됩니다.

복소수 평면의 모든 지점은 극좌표계를 사용하여 절대값에 따라 표현할 수도 있습니다. 극좌표에서 점의 특징은 두 가지입니다.

  • 점의 크기는 원점(즉, 0,0 또는 x축과 y축이 교차하는 점)에서의 거리입니다.
  • 그것의 위상은 실제 축과 원점에서 점까지 그리는 선 사이의 각도입니다.

복소수 인스턴스화

다음 방법 중 하나로 복소수에 값을 할당할 수 있습니다.

  • 생성자에 두 Double 값을 전달합니다. 첫 번째 값은 복소수의 실제 부분을 나타내고 두 번째 값은 허수 부분을 나타냅니다. 이러한 값은 2차원 카티전 좌표계의 복소수 위치를 나타냅니다.

  • 정적 Shared 메서드를 호출하여 극좌표로부터 복소수를 만듭니다 (Complex.FromPolarCoordinates는 Visual Basic에서 사용).

  • 개체에 Byte, , SByte, Int16, UInt16Int32, UInt32, Int64, UInt64Single또는 Double 값을 할당합니다Complex. 값은 복소수의 실제 부분이 되고 허수 부분은 0과 같습니다.

  • C#에서는 Decimal 또는 BigInteger 값을 Complex 개체로 캐스팅하거나, Visual Basic에서는 변환합니다. 값은 복소수의 실제 부분이 되고 허수 부분은 0과 같습니다.

  • 메서드 또는 연산자가 반환하는 복소수를 개체에 할당합니다 Complex . 예를 들어 두 Complex.Add 복소수의 합계인 복소수를 반환하고 Complex.Addition 연산자는 두 개의 복소수를 추가하고 결과를 반환하는 정적 메서드입니다.

다음 예제에서는 복소수에 값을 할당하는 이러한 다섯 가지 방법을 각각 보여 줍니다.

using System;
using System.Numerics;

public class CreateEx
{
    public static void Run()
    {
        // Create a complex number by calling its class constructor.
        Complex c1 = new Complex(12, 6);
        Console.WriteLine(c1);

        // Assign a Double to a complex number.
        Complex c2 = 3.14;
        Console.WriteLine(c2);

        // Cast a Decimal to a complex number.
        Complex c3 = (Complex)12.3m;
        Console.WriteLine(c3);

        // Assign the return value of a method to a Complex variable.
        Complex c4 = Complex.Pow(Complex.One, -1);
        Console.WriteLine(c4);

        // Assign the value returned by an operator to a Complex variable.
        Complex c5 = Complex.One + Complex.One;
        Console.WriteLine(c5);

        // Instantiate a complex number from its polar coordinates.
        Complex c6 = Complex.FromPolarCoordinates(10, .524);
        Console.WriteLine(c6);
    }
}
// The example displays the following output:
//       (12, 6)
//       (3.14, 0)
//       (12.3, 0)
//       (1, 0)
//       (2, 0)
//       (8.65824721882145, 5.00347430269914)
Imports System.Numerics

Module Example
   Public Sub Run()
      ' Create a complex number by calling its class constructor.
      Dim c1 As New Complex(12, 6)
      Console.WriteLine(c1)
      
      ' Assign a Double to a complex number.
      Dim c2 As Complex = 3.14
      Console.WriteLine(c2)
      
      ' Cast a Decimal to a complex number.
      Dim c3 As Complex = CType(12.3d, Complex)
      Console.WriteLine(c3)
      
      ' Assign the return value of a method to a Complex variable.
      Dim c4 As Complex = Complex.Pow(Complex.One, -1)
      Console.WriteLine(c4)
      
      ' Assign the value returned by an operator to a Complex variable.
      Dim c5 As Complex = Complex.One + Complex.One
      Console.WriteLine(c5)

      ' Instantiate a complex number from its polar coordinates.
      Dim c6 As Complex = Complex.FromPolarCoordinates(10, .524)
      Console.WriteLine(c6)
   End Sub
End Module
' The example displays the following output:
'       (12, 6)
'       (3.14, 0)
'       (12.3000001907349, 0)
'       (1, 0)
'       (2, 0)
'       (8.65824721882145, 5.00347430269914)

복소수를 사용하는 작업

.NET의 Complex 구조에는 다음 기능을 제공하는 멤버가 포함됩니다.

  • 두 복소수를 비교하여 같은지 여부를 확인하는 메서드입니다.
  • 복소수에 대한 산술 연산을 수행하는 연산자입니다. Complex 연산자를 사용하면 복소수를 사용하여 더하기, 빼기, 곱하기, 나누기 및 단항 부정을 수행할 수 있습니다.
  • 복소수에 대해 다른 숫자 연산을 수행하는 메서드입니다. 네 가지 기본 산술 연산 외에도 복소수를 지정된 전력으로 올리고, 복소수의 제곱근을 찾고, 복소수의 절대값을 가져올 수 있습니다.
  • 복소수에 대해 삼각 연산을 수행하는 메서드입니다. 예를 들어 복소수로 표시되는 각도의 탄젠트를 계산할 수 있습니다.

RealImaginary 속성이 읽기 전용이므로, 기존 Complex 개체의 값을 수정할 수 없습니다. 반환 값이 형식Complex인 경우 숫자에 대한 Complex 작업을 수행하는 모든 메서드는 새 Complex 숫자를 반환합니다.

정밀도 및 복소수

복소수의 실제 부분과 가상 부분은 두 개의 배정밀도 부동 소수점 값으로 표시됩니다. 즉 Complex , 배정밀도 부동 소수점 값과 같은 값은 숫자 연산의 결과로 정밀도를 잃을 수 있습니다. 즉, 두 값 간의 차이가 정밀도 손실로 인해 발생하더라도 두 Complex 값의 같음에 대한 엄격한 비교가 실패할 수 있습니다. 자세한 내용은 Double를 참조하세요.

예를 들어, 숫자의 로그에 대해 거듭제곱 연산을 수행하면 원래 숫자가 반환됩니다. 그러나 일부 경우에는 부동 소수점 값의 정확성 손실로 인해 두 값 사이에 약간의 차이가 발생할 수 있습니다. 이는 다음 예제가 보여줍니다.

Complex value = new Complex(Double.MinValue / 2, Double.MinValue / 2);
Complex value2 = Complex.Exp(Complex.Log(value));
Console.WriteLine($"{value} \n{value2} \nEqual: {value == value2}");
// The example displays the following output:
//    (-8.98846567431158E+307, -8.98846567431158E+307)
//    (-8.98846567431161E+307, -8.98846567431161E+307)
//    Equal: False
Dim value As New Complex(Double.MinValue / 2, Double.MinValue / 2)
Dim value2 As Complex = Complex.Exp(Complex.Log(value))
Console.WriteLine("{0} {3}{1} {3}Equal: {2}", value, value2,
                                              value = value2,
                                              vbCrLf)
' The example displays the following output:
'    (-8.98846567431158E+307, -8.98846567431158E+307)
'    (-8.98846567431161E+307, -8.98846567431161E+307)
'    Equal: False

마찬가지로 숫자의 제곱근을 계산하는 다음 예제는 .NET의 Complex 32비트 및 IA64 버전에서 약간 다른 결과를 생성합니다.

Complex minusOne = new Complex(-1, 0);
Console.WriteLine(Complex.Sqrt(minusOne));
// The example displays the following output:
//    (6.12303176911189E-17, 1) on 32-bit systems.
//    (6.12323399573677E-17,1) on IA64 systems.
Dim minusOne As New Complex(-1, 0)
Console.WriteLine(Complex.Sqrt(minusOne))
' The example displays the following output:
'    (6.12303176911189E-17, 1) on 32-bit systems.
'    (6.12323399573677E-17,1) on IA64 systems.

무한대 및 NaN

복소수의 실제 부분과 허수 부분은 값으로 Double 표시됩니다. 복소수의 실제 또는 허수 부분은 Double.MinValue에서 Double.MaxValue까지뿐만 아니라, 그 값은 Double.PositiveInfinity, Double.NegativeInfinity, 또는 Double.NaN가 될 수 있습니다. Double.PositiveInfinity, Double.NegativeInfinityDouble.NaN 모든 산술 또는 삼각 연산에서 전파됩니다.

다음 예제에서 Zero로 나누면 실수 부분과 허수 부분이 둘 다 Double.NaN인 복소수가 생성됩니다. 따라서 이 값을 곱하면 실제 부분과 허수 부분이 있는 복소수도 생성됩니다 Double.NaN. 마찬가지로 Double 형식의 범위를 초과하는 곱셈을 수행하면 실수 부분이 Double.NaN이고 허수 부분이 Double.PositiveInfinity인 복소수가 생성됩니다. 이후에 이 복소수로 나누기를 수행하면 실제 부분과 허수 부분이 Double.NaNDouble.PositiveInfinity있는 복소수를 반환합니다.

using System;
using System.Numerics;

public class NaNEx
{
    public static void Run()
    {
        Complex c1 = new Complex(Double.MaxValue / 2, Double.MaxValue / 2);

        Complex c2 = c1 / Complex.Zero;
        Console.WriteLine(c2.ToString());
        c2 = c2 * new Complex(1.5, 1.5);
        Console.WriteLine(c2.ToString());
        Console.WriteLine();

        Complex c3 = c1 * new Complex(2.5, 3.5);
        Console.WriteLine(c3.ToString());
        c3 = c3 + new Complex(Double.MinValue / 2, Double.MaxValue / 2);
        Console.WriteLine(c3);
    }
}
// The example displays the following output:
//       (NaN, NaN)
//       (NaN, NaN)
//       (NaN, Infinity)
//       (NaN, Infinity)
Imports System.Numerics

Module Example4
    Public Sub Run()
        Dim c1 As Complex = New Complex(Double.MaxValue / 2, Double.MaxValue / 2)

        Dim c2 As Complex = c1 / Complex.Zero
        Console.WriteLine(c2.ToString())
        c2 = c2 * New Complex(1.5, 1.5)
        Console.WriteLine(c2.ToString())
        Console.WriteLine()

        Dim c3 As Complex = c1 * New Complex(2.5, 3.5)
        Console.WriteLine(c3.ToString())
        c3 = c3 + New Complex(Double.MinValue / 2, Double.MaxValue / 2)
        Console.WriteLine(c3)
    End Sub
End Module
' The example displays the following output:
'       (NaN, NaN)
'       (NaN, NaN)
'
'       (NaN, Infinity)
'       (NaN, Infinity)

유효하지 않은 경우거나 데이터 유형의 범위를 초과하는 복소수의 Double 수학 연산은 예외를 발생시키지 않습니다. 대신에 Double.PositiveInfinity, Double.NegativeInfinity, 또는 Double.NaN를 다음 조건에서 반환합니다.

이는 메서드에서 수행하는 중간 계산에 적용됩니다. 예를 들어 곱하기 new Complex(9e308, 9e308) and new Complex(2.5, 3.5) 는 수식(ac - bd) + (ad + bc)i를 사용합니다. 곱하기에서 발생하는 실제 구성 요소의 계산은 9e308 2.5 - 9e308 3.5 식을 계산합니다. 이 식의 각 중간 곱셈은 Double.PositiveInfinity를 반환하며, Double.PositiveInfinity에서 Double.PositiveInfinity를 빼려는 시도는 Double.NaN를 반환합니다.

복소수 서식 지정

기본적으로 복소수의 문자열 표현은 <실수;허수> 형식을 취합니다. 여기서 실수허수는 복소수를 이루는 실수 및 허수 구성 요소 값의 문자열 표현입니다. 메서드의 ToString 일부 오버로드를 사용하면 이러한 Double 값의 문자열 표현을 사용자 지정하여 특정 문화권의 서식 규칙을 반영하거나 표준 또는 사용자 지정 숫자 형식 문자열로 정의된 특정 형식으로 표시할 수 있습니다. (자세한 내용은 를 참조하세요 .표준 숫자 형식 문자열 및사용자 지정 숫자 형식 문자열입니다.)

복소수의 문자열 표현을 표현하는 보다 일반적인 방법 중 하나는 복소수 a + bi 의 실제 구성 요소이며 a 복소수의 허수 구성 요소인 형식b을 사용합니다. 전기 공학에서 복소수는 가장 일반적으로 .로 a + bj표현됩니다. 이러한 두 양식 중 하나에서 복소수의 문자열 표현을 반환할 수 있습니다. 이렇게 하려면 ICustomFormatterIFormatProvider 인터페이스를 구현하여 사용자 지정 형식 공급자를 정의한 다음, String.Format(IFormatProvider, String, Object[]) 메서드를 호출합니다.

다음 예제에서는 ComplexFormatter 클래스를 정의하여 복소수를 문자열로 표현하는 방법을 보여 줍니다. 이 문자열은 a + bi 또는 a + bj 형식으로 나타낼 수 있습니다.

using System;
using System.Numerics;

public class ComplexFormatter : IFormatProvider, ICustomFormatter
{
    public object GetFormat(Type formatType)
    {
        if (formatType == typeof(ICustomFormatter))
            return this;
        else
            return null;
    }

    public string Format(string format, object arg,
                         IFormatProvider provider)
    {
        if (arg is Complex c1)
        {
            // Check if the format string has a precision specifier.
            int precision;
            string fmtString = string.Empty;
            if (format.Length > 1)
            {
                try
                {
                    precision = int.Parse(format.Substring(1));
                }
                catch (FormatException)
                {
                    precision = 0;
                }
                fmtString = "N" + precision.ToString();
            }
            if (format.Substring(0, 1).Equals("I", StringComparison.OrdinalIgnoreCase))
            {
                // Determine the sign to display.
                char sign = c1.Imaginary < 0 ? '-' : '+';
                // Display the determined sign and the absolute value of the imaginary part.
                return c1.Real.ToString(fmtString) + " " + sign + " " + Math.Abs(c1.Imaginary).ToString(fmtString) + "i";
            }
            else if (format.Substring(0, 1).Equals("J", StringComparison.OrdinalIgnoreCase))
            {
                // Determine the sign to display.
                char sign = c1.Imaginary < 0 ? '-' : '+';
                // Display the determined sign and the absolute value of the imaginary part.
                return c1.Real.ToString(fmtString) + " " + sign + " " + Math.Abs(c1.Imaginary).ToString(fmtString) + "j";
            }
            else
                return c1.ToString(format, provider);
        }
        else
        {
            if (arg is IFormattable formattable)
                return formattable.ToString(format, provider);
            else if (arg != null)
                return arg.ToString();
            else
                return string.Empty;
        }
    }
}
Imports System.Numerics

Public Class ComplexFormatter
    Implements IFormatProvider, ICustomFormatter

    Public Function GetFormat(formatType As Type) As Object _
                    Implements IFormatProvider.GetFormat
        If formatType Is GetType(ICustomFormatter) Then
            Return Me
        Else
            Return Nothing
        End If
    End Function

    Public Function Format(fmt As String, arg As Object,
                           provider As IFormatProvider) As String _
                    Implements ICustomFormatter.Format
        If TypeOf arg Is Complex Then
            Dim c1 As Complex = DirectCast(arg, Complex)
            ' Check if the format string has a precision specifier.
            Dim precision As Integer
            Dim fmtString As String = String.Empty
            If fmt.Length > 1 Then
                Try
                    precision = Integer.Parse(fmt.Substring(1))
                Catch e As FormatException
                    precision = 0
                End Try
                fmtString = "N" + precision.ToString()
            End If
            ' Determine the sign to display.
            Dim sign As Char = If(c1.Imaginary < 0.0, "-"c, "+"c)
            ' Display the determined sign and the absolute value of the imaginary part.
            If fmt.Substring(0, 1).Equals("I", StringComparison.OrdinalIgnoreCase) Then
                Return c1.Real.ToString(fmtString) + " " + sign + " " + Math.Abs(c1.Imaginary).ToString(fmtString) + "i"
            ElseIf fmt.Substring(0, 1).Equals("J", StringComparison.OrdinalIgnoreCase) Then
                Return c1.Real.ToString(fmtString) + " " + sign + " " + Math.Abs(c1.Imaginary).ToString(fmtString) + "j"
            Else
                Return c1.ToString(fmt, provider)
            End If
        Else
            If TypeOf arg Is IFormattable Then
                Return DirectCast(arg, IFormattable).ToString(fmt, provider)
            ElseIf arg IsNot Nothing Then
                Return arg.ToString()
            Else
                Return String.Empty
            End If
        End If
    End Function
End Class

다음 예제에서는 이 사용자 지정 포맷터를 사용하여 복소수의 문자열 표현을 표시합니다.

public class CustomFormatEx
{
    public static void Run()
    {
        Complex c1 = new(12.1, 15.4);
        Console.WriteLine($"Formatting with ToString:         {c1}");
        Console.WriteLine($"Formatting with ToString(format): {c1:N2}");
        Console.WriteLine($"Custom formatting with I0:\t" +
            $"  {string.Format(new ComplexFormatter(), "{0:I0}", c1)}");
        Console.WriteLine($"Custom formatting with J3:\t" +
            $"  {string.Format(new ComplexFormatter(), "{0:J3}", c1)}");
    }
}

// The example displays the following output:
//    Formatting with ToString():       <12.1; 15.4>
//    Formatting with ToString(format): <12.10; 15.40>
//    Custom formatting with I0:        12 + 15i
//    Custom formatting with J3:        12.100 + 15.400j
Module Example2
    Public Sub Run()
        Dim c1 As New Complex(12.1, 15.4)
        Console.WriteLine($"Formatting with ToString():       {c1}")
        Console.WriteLine($"Formatting with ToString(format): {c1:N2}")
        Console.WriteLine($"Custom formatting with I0:        " +
                          $"{String.Format(New ComplexFormatter(), "{0:I0}", c1)}")
        Console.WriteLine($"Custom formatting with J3:        " +
                          $"{String.Format(New ComplexFormatter(), "{0:J3}", c1)}")
    End Sub
End Module

' The example displays the following output:
'    Formatting with ToString():       <12.1; 15.4>
'    Formatting with ToString(format): <12.10; 15.40>
'    Custom formatting with I0:        12 + 15i
'    Custom formatting with J3:        12.100 + 15.400j

생성자

Name Description
Complex(Double, Double)

지정된 실제 값과 가상 값을 사용하여 구조체의 Complex 새 인스턴스를 초기화합니다.

필드

Name Description
ImaginaryOne

실수가 0이고 허수 수가 1과 같은 새 Complex 인스턴스를 반환합니다.

Infinity

무한대를 복소수로 나타냅니다.

NaN

숫자(NaN)가 아닌 복합 인스턴스를 나타냅니다.

One

실수가 1이고 허수 수가 0인 새 Complex 인스턴스를 반환합니다.

Zero

실수가 0이고 허수 수가 0인 새 Complex 인스턴스를 반환합니다.

속성

Name Description
Imaginary

현재 Complex 개체의 가상 구성 요소를 가져옵니다.

Magnitude

복소수의 크기(또는 절대값)를 가져옵니다.

Phase

복소수의 단계를 가져옵니다.

Real

현재 Complex 개체의 실제 구성 요소를 가져옵니다.

메서드

Name Description
Abs(Complex)

복소수의 절대값(또는 크기)을 가져옵니다.

Acos(Complex)

지정된 복소수의 아크 코사인 각도를 반환합니다.

Add(Complex, Complex)

두 개의 복소수를 추가하고 결과를 반환합니다.

Add(Complex, Double)

배정밀도 실수에 복소수를 추가하고 결과를 반환합니다.

Add(Double, Complex)

복소수에 배정밀도 실수 값을 추가하고 결과를 반환합니다.

Asin(Complex)

지정된 복소수의 아크 사인 각도를 반환합니다.

Atan(Complex)

지정된 복소수의 아크 탄젠트 각도를 반환합니다.

Conjugate(Complex)

복소수의 컨쥬게이트를 계산하고 결과를 반환합니다.

Cos(Complex)

지정된 복소수의 코사인을 반환합니다.

Cosh(Complex)

지정된 복소수의 하이퍼볼릭 코사인을 반환합니다.

CreateChecked<TOther>(TOther)

현재 형식의 표현 가능한 범위를 벗어나는 값에 대해 오버플로 예외를 throw하여 값에서 현재 형식의 인스턴스를 만듭니다.

CreateSaturating<TOther>(TOther)

현재 형식의 표현 가능한 범위를 벗어나는 모든 값을 채도하여 값에서 현재 형식의 인스턴스를 만듭니다.

CreateTruncating<TOther>(TOther)

현재 형식의 표현 가능한 범위를 벗어나는 값을 잘라내어 값에서 현재 형식의 인스턴스를 만듭니다.

Divide(Complex, Complex)

복소수 하나를 다른 복소수로 나누고 결과를 반환합니다.

Divide(Complex, Double)

복소수 1개를 배정밀도 실수로 나누고 결과를 반환합니다.

Divide(Double, Complex)

배정밀도 실수 하나를 복소수로 나누고 결과를 반환합니다.

Equals(Complex)

현재 인스턴스와 지정된 복소수의 값이 같은지 여부를 나타내는 값을 반환합니다.

Equals(Object)

현재 인스턴스와 지정된 개체의 값이 같은지 여부를 나타내는 값을 반환합니다.

Exp(Complex)

복소수로 지정된 전력으로 발생된 값을 반환 e 합니다.

FromPolarCoordinates(Double, Double)

점의 극좌표에서 복소수를 만듭니다.

GetHashCode()

현재 Complex 개체의 해시 코드를 반환합니다.

IsComplexNumber(Complex)

값이 복합 값을 나타내는지 여부를 확인합니다.

IsEvenInteger(Complex)

값이 짝수 정수인지 여부를 확인합니다.

IsFinite(Complex)

지정된 복소수의 유한 여부를 확인합니다.

IsImaginaryNumber(Complex)

값이 허수의 숫자를 나타내는지 여부를 결정합니다.

IsInfinity(Complex)

지정된 복소수가 무한대로 계산되는지 여부를 나타내는 값을 반환합니다.

IsInteger(Complex)

값이 정수 값을 나타내는지 여부를 결정합니다.

IsNaN(Complex)

지정된 복합 인스턴스가 숫자(NaN)가 아닌지 여부를 나타내는 값을 반환합니다.

IsNegative(Complex)

값이 음수인지 여부를 확인합니다.

IsNegativeInfinity(Complex)

값이 음수 무한대인지 여부를 확인합니다.

IsNormal(Complex)

값이 정상인지 여부를 확인합니다.

IsOddInteger(Complex)

값이 홀수 정수인지 여부를 결정합니다.

IsPositive(Complex)

값이 양수인지 여부를 확인합니다.

IsPositiveInfinity(Complex)

값이 양의 무한대인지 여부를 확인합니다.

IsRealNumber(Complex)

값이 실수인지 여부를 확인합니다.

IsSubnormal(Complex)

값이 영수인지 여부를 확인합니다.

Log(Complex, Double)

지정된 밑에서 지정된 복소수의 로그를 반환합니다.

Log(Complex)

지정된 복소수의 자연(기본 e) 로그를 반환합니다.

Log10(Complex)

지정된 복소수의 base-10 로그를 반환합니다.

MaxMagnitude(Complex, Complex)

두 값을 더 큰 컴퓨팅과 비교합니다.

MinMagnitude(Complex, Complex)

두 값을 더 작은 컴퓨팅과 비교합니다.

Multiply(Complex, Complex)

두 복소수의 곱을 반환합니다.

Multiply(Complex, Double)

복소수와 배정밀도 실수의 곱을 반환합니다.

Multiply(Double, Complex)

배정밀도 실수와 복소수의 곱을 반환합니다.

Negate(Complex)

지정된 복소수의 역가산값을 반환합니다.

Parse(ReadOnlySpan<Byte>, IFormatProvider)

복소수를 나타냅니다.

Parse(ReadOnlySpan<Byte>, NumberStyles, IFormatProvider)

복소수를 나타냅니다.

Parse(ReadOnlySpan<Char>, IFormatProvider)

문자 범위를 값으로 구문 분석합니다.

Parse(ReadOnlySpan<Char>, NumberStyles, IFormatProvider)

문자 범위를 값으로 구문 분석합니다.

Parse(String, IFormatProvider)

문자열을 값으로 구문 분석합니다.

Parse(String, NumberStyles, IFormatProvider)

문자열을 값으로 구문 분석합니다.

Pow(Complex, Complex)

지정된 복소수를 복소수로 지정한 전력으로 곱한 값을 반환합니다.

Pow(Complex, Double)

배정밀도 부동 소수점 숫자로 지정된 전력으로 발생된 지정된 복소수를 반환합니다.

Reciprocal(Complex)

복소수의 곱하기 역함수를 반환합니다.

Sin(Complex)

지정된 복소수의 사인을 반환합니다.

Sinh(Complex)

지정된 복소수의 하이퍼볼릭 사인을 반환합니다.

Sqrt(Complex)

지정된 복소수의 제곱근을 반환합니다.

Subtract(Complex, Complex)

복소수 하나를 다른 복소수에서 빼고 결과를 반환합니다.

Subtract(Complex, Double)

복소수에서 배정밀도 실수 1개를 빼고 결과를 반환합니다.

Subtract(Double, Complex)

배정밀도 실수에서 복소수 하나를 빼고 결과를 반환합니다.

Tan(Complex)

지정된 복소수의 탄젠트를 반환합니다.

Tanh(Complex)

지정된 복소수의 쌍곡 탄젠트를 반환합니다.

ToString()

현재 복소수의 값을 카티전 형식의 해당 문자열 표현으로 변환합니다.

ToString(IFormatProvider)

지정된 문화권별 서식 지정 정보를 사용하여 현재 복소수의 값을 카티전 형식의 해당 문자열 표현으로 변환합니다.

ToString(String, IFormatProvider)

실제 및 허수 부분에 대해 지정된 형식 및 문화권별 형식 정보를 사용하여 현재 복소수의 값을 카티전 형식의 해당 문자열 표현으로 변환합니다.

ToString(String)

실제 및 허수 부분에 대해 지정된 형식을 사용하여 현재 복소수의 값을 카티전 형식의 해당 문자열 표현으로 변환합니다.

TryFormat(Span<Byte>, Int32, ReadOnlySpan<Char>, IFormatProvider)

현재 인스턴스의 값을 제공된 바이트 범위로 UTF-8로 서식을 지정하려고 시도합니다.

TryFormat(Span<Char>, Int32, ReadOnlySpan<Char>, IFormatProvider)

현재 인스턴스의 값을 제공된 문자 범위로 서식을 지정하려고 시도합니다.

TryParse(ReadOnlySpan<Byte>, IFormatProvider, Complex)

복소수를 나타냅니다.

TryParse(ReadOnlySpan<Byte>, NumberStyles, IFormatProvider, Complex)

복소수를 나타냅니다.

TryParse(ReadOnlySpan<Char>, IFormatProvider, Complex)

문자 범위를 값으로 구문 분석하려고 시도합니다.

TryParse(ReadOnlySpan<Char>, NumberStyles, IFormatProvider, Complex)

문자 범위를 값으로 구문 분석하려고 시도합니다.

TryParse(String, IFormatProvider, Complex)

문자열을 값으로 구문 분석하려고 시도합니다.

TryParse(String, NumberStyles, IFormatProvider, Complex)

문자열을 값으로 구문 분석하려고 시도합니다.

연산자

Name Description
Addition(Complex, Complex)

두 개의 복소수를 추가합니다.

Addition(Complex, Double)

배정밀도 실수에 복소수를 추가합니다.

Addition(Double, Complex)

복소수에 배정밀도 실수 값을 추가합니다.

Decrement(Complex)

값을 줄입니다.

Division(Complex, Complex)

지정된 복소수를 지정된 다른 복소수로 나눕니다.

Division(Complex, Double)

지정된 복소수를 지정된 배정밀도 실수로 나눕니다.

Division(Double, Complex)

지정된 배정밀도 실수 값을 지정된 복소수로 나눕니다.

Equality(Complex, Complex)

두 복소수의 같음 여부를 나타내는 값을 반환합니다.

Explicit(BigInteger to Complex)

값을 복소수로 BigInteger 명시적으로 변환하는 방법을 정의합니다.

Explicit(Decimal to Complex)

값을 복소수로 Decimal 명시적으로 변환하는 방법을 정의합니다.

Explicit(Int128 to Complex)

값을 배정밀도 복소수로 명시적으로 변환 Int128 합니다.

Explicit(UInt128 to Complex)

값을 배정밀도 복소수로 명시적으로 변환 UInt128 합니다.

Implicit(BFloat16 to Complex)

복소수를 나타냅니다.

Implicit(Byte to Complex)

부호 없는 바이트를 복소수로 암시적으로 변환하는 것을 정의합니다.

Implicit(Char to Complex)

값을 배정밀도 복소수로 암시적으로 변환 Char 합니다.

Implicit(Double to Complex)

배정밀도 부동 소수점 숫자를 복소수로 암시적으로 변환하는 것을 정의합니다.

Implicit(Half to Complex)

값을 배정밀도 복소수로 암시적으로 변환 Half 합니다.

Implicit(Int16 to Complex)

부호 있는 16비트 정수를 복소수로 암시적으로 변환하는 방법을 정의합니다.

Implicit(Int32 to Complex)

부호 있는 32비트 정수를 복소수로 암시적으로 변환하는 방법을 정의합니다.

Implicit(Int64 to Complex)

부호 있는 64비트 정수를 복소수로 암시적으로 변환하는 방법을 정의합니다.

Implicit(IntPtr to Complex)

값을 배정밀도 복소수로 암시적으로 변환 IntPtr 합니다.

Implicit(SByte to Complex)

부호 있는 바이트를 복소수로 암시적으로 변환하는 것을 정의합니다.

이 API는 CLS 규격이 아닙니다.

Implicit(Single to Complex)

단정밀도 부동 소수점 숫자를 복소수로 암시적으로 변환하는 것을 정의합니다.

Implicit(UInt16 to Complex)

부호 없는 16비트 정수를 복소수로 암시적으로 변환하는 방법을 정의합니다.

이 API는 CLS 규격이 아닙니다.

Implicit(UInt32 to Complex)

부호 없는 32비트 정수를 복소수로 암시적으로 변환하는 방법을 정의합니다.

이 API는 CLS 규격이 아닙니다.

Implicit(UInt64 to Complex)

부호 없는 64비트 정수를 복소수로 암시적으로 변환하는 방법을 정의합니다.

이 API는 CLS 규격이 아닙니다.

Implicit(UIntPtr to Complex)

값을 배정밀도 복소수로 암시적으로 변환 UIntPtr 합니다.

Increment(Complex)

값을 증분합니다.

Inequality(Complex, Complex)

두 복소수가 같지 않은지 여부를 나타내는 값을 반환합니다.

Multiply(Complex, Complex)

지정된 두 개의 복소수를 곱합니다.

Multiply(Complex, Double)

지정된 복소수를 지정된 배정밀도 실수에 곱합니다.

Multiply(Double, Complex)

지정된 배정밀도 실수와 지정된 복소수를 곱합니다.

Subtraction(Complex, Complex)

다른 복소수에서 복소수를 뺍니다.

Subtraction(Complex, Double)

복소수에서 배정밀도 실수 값을 뺍니다.

Subtraction(Double, Complex)

배정밀도 실수에서 복소수를 뺍니다.

UnaryNegation(Complex)

지정된 복소수의 역가산값을 반환합니다.

UnaryPlus(Complex)

값의 단항 플러스를 계산합니다.

명시적 인터페이스 구현

Name Description
IAdditiveIdentity<Complex,Complex>.AdditiveIdentity

현재 형식의 추가 ID를 가져옵니다.

IMultiplicativeIdentity<Complex,Complex>.MultiplicativeIdentity

현재 형식의 곱하기 ID를 가져옵니다.

INumberBase<Complex>.Abs(Complex)

값의 절대값을 계산합니다.

INumberBase<Complex>.IsCanonical(Complex)

값이 정식 표현에 있는지 여부를 확인합니다.

INumberBase<Complex>.IsZero(Complex)

값이 0인지 여부를 확인합니다.

INumberBase<Complex>.MaxMagnitudeNumber(Complex, Complex)

크기가 더 큰 컴퓨팅과 두 값을 비교하고 입력 NaN이 있는 경우 다른 값을 반환합니다.

INumberBase<Complex>.MinMagnitudeNumber(Complex, Complex)

크기가 작은 컴퓨팅과 두 값을 비교하고 입력 NaN이 있으면 다른 값을 반환합니다.

INumberBase<Complex>.MultiplyAddEstimate(Complex, Complex, Complex)

() + left.의 추정치를 * rightaddend 계산합니다.

INumberBase<Complex>.One

형식의 값을 1 가져옵니다.

INumberBase<Complex>.Radix

형식의 radix 또는 base를 가져옵니다.

INumberBase<Complex>.TryConvertFromChecked<TOther>(TOther, Complex)

복소수를 나타냅니다.

INumberBase<Complex>.TryConvertFromSaturating<TOther>(TOther, Complex)

복소수를 나타냅니다.

INumberBase<Complex>.TryConvertFromTruncating<TOther>(TOther, Complex)

복소수를 나타냅니다.

INumberBase<Complex>.TryConvertToChecked<TOther>(Complex, TOther)

현재 형식의 인스턴스를 다른 형식으로 변환하여 현재 형식의 표시 가능한 범위를 벗어나는 값에 대해 오버플로 예외를 throw합니다.

INumberBase<Complex>.TryConvertToSaturating<TOther>(Complex, TOther)

현재 형식의 인스턴스를 다른 형식으로 변환하여 현재 형식의 표현 가능한 범위를 벗어나는 값을 채도합니다.

INumberBase<Complex>.TryConvertToTruncating<TOther>(Complex, TOther)

현재 형식의 인스턴스를 다른 형식으로 변환하여 현재 형식의 표현 가능한 범위를 벗어나는 값을 잘리려고 합니다.

INumberBase<Complex>.Zero

형식의 값을 0 가져옵니다.

ISignedNumber<Complex>.NegativeOne

형식의 값을 -1 가져옵니다.

적용 대상