다음을 통해 공유


산술 연산자

이 항목에서는 F#에서 사용할 수 있는 산술 연산자를 설명합니다.

이진 산술 연산자 요약

F#의 산술 연산은 선택되지 않은확인된두 가지 모드로 수행할 수 있습니다. 기본적으로 산술 연산은 성능 우선 순위를 지정하지만 오버플로/언더플로를 허용하는 선택되지 않은 동작을 사용합니다. 확인된 연산자는 이러한 경우 예외를 던져서 안전을 우선합니다.

검사되지 않은 산술 연산자

다음 표는 Unchecked Arithmetic에서 박스형 해제 정수형 및 부동소수점형에 사용할 수 있는 이진 산술 연산자를 요약한 것입니다.

이진 연산자 메모
+(더하기, 플러스) 선택 취소. 숫자가 함께 추가되고 합계가 형식에서 지원하는 최대 절대값을 초과하는 경우 오버플로 조건이 발생할 수 있습니다.
-(뺄셈, 마이너스) 선택 해제됨. 부호 없는 데이터 유형을 뺄 때나, 형식에 의해 표현될 수 없을 정도로 작은 부동 소수점 값인 경우, 언더플로 문제를 발생시킬 수 있는 상황입니다.
*(곱하기, 시간) 선택 해제됨 숫자가 곱해져서 결과가 자료형이 지원하는 최대 허용 절대값을 초과할 경우 오버플로 조건이 발생할 수 있습니다.
/(나뉨, 나누기) 0으로 나누면 정수 계열 형식에 대한 DivideByZeroException 발생합니다. 부동 소수점 형식의 경우 0으로 나누면 특수 부동 소수점 값 infinity 또는 -infinity이 발생합니다. 부동 소수점 숫자가 너무 작아서 형식으로 나타낼 수 없는 경우 언더플로 상태도 발생할 수 있습니다.
%(나머지, rem) 나누기 작업의 나머지 부분을 반환합니다. 결과의 부호는 첫 번째 피연산자의 부호와 같습니다.
** (거듭제곱, 제곱승) 결과가 형식의 최대 절대값을 초과하는 경우 가능한 오버플로 조건입니다.

지수 연산자는 부동 소수점 형식에서만 작동합니다.

제어되지 않은 동작은 오버플로 또는 언더플로가 발생할 때 예외를 발동하지 않으므로 큰 값이나 경계값에 대한 산술 연산에 덜 안전합니다.

확인된 산술 연산자

다음 표는 unboxed 정수 형식을 사용하는 확인된 산술에 대해 사용할 수 있는 이진 산술 연산자를 요약합니다. 확인된 연산자는 오버플로 또는 언더플로에 대한 계산을 확인하여 중요한 애플리케이션에 더 안전한 산술 연산을 제공합니다.

이진 연산자 노트
+(덧셈, 더하기) 결과가 최대값을 초과하거나 형식에서 지원하는 최소값보다 낮으면 OverflowException throw합니다. 오버플로언더플로 모두 가능합니다.
-(빼기, 마이너스) 결과가 최대값을 초과하거나 형식에서 지원하는 최소값보다 낮으면 OverflowException throw합니다. 오버플로언더플로 모두 가능합니다.
*(곱하기, 시간) 제품이 최대값을 초과하거나 형식에서 지원하는 최소값보다 낮으면 OverflowException throw합니다. 오버플로언더플로 모두 가능합니다.

검사된 연산자는 산술 오버플로가 명시적으로 포착되어 처리되도록 하는 데 유용합니다.

예제는 다음과 같습니다.

open Microsoft.FSharp.Core.Operators.Checked

let safeAddition () =
    try
        let result = 2147483647 + 1 // Attempt to add integers at their maximum boundary
        printfn "Result: %d" result
    with
    | :? System.OverflowException as ex ->
        printfn "Overflow occurred: %s" ex.Message

safeAddition()

// Output:
// Overflow occurred: Arithmetic operation resulted in an overflow.

검사된 연산자와 비검사된 연산자 중에서 선택하기

확인된 연산자: 오버플로 오류를 명시적으로 검색하고 처리해야 하는 시나리오에 이상적입니다.

선택되지 않은 연산자: 기본적으로 F#은 성능상의 이유로 선택되지 않은 산술 연산을 사용합니다. 이러한 작업은 오버플로 또는 언더플로가 발생할 때 자동으로 잘못된 결과를 생성할 수 있습니다. 주의해서 사용하십시오.

단항 산술 연산자 요약

다음 표에는 정수 및 부동 소수점 형식에 사용할 수 있는 단항 산술 연산자가 요약되어 있습니다.

단항 연산자 노트
+ (긍정) 모든 산술 식에 적용할 수 있습니다. 값의 부호를 변경하지 않습니다.
-(부정, 부정) 모든 산술 식에 적용할 수 있습니다. 값의 부호를 변경합니다.

정수 계열 형식에 대한 오버플로 또는 언더플로의 동작은 래핑하는 것입니다. 이로 인해 잘못된 결과가 발생합니다. 정수 오버플로는 소프트웨어가 이를 고려하여 작성되지 않은 경우 보안 문제에 영향을 줄 수 있는 잠재적으로 심각한 문제입니다. 귀하의 애플리케이션에 우려가 된다면, Microsoft.FSharp.Core.Operators.Checked에서 확인된 연산자를 사용하는 것을 고려하십시오.

이진 비교 연산자 요약

다음 표에서는 정수 및 부동 소수점 형식에 사용할 수 있는 이진 비교 연산자를 보여줍니다. 이러한 연산자는 bool형식의 값을 반환합니다.

IEEE 부동 소수점 표현은 정확한 같음 연산을 지원하지 않으므로 부동 소수점 숫자를 같음으로 직접 비교해서는 안 됩니다. 코드를 검사하여 쉽게 같은지 확인할 수 있는 두 개의 숫자는 실제로 비트 표현이 다를 수 있습니다.

오퍼레이터 메모
=(평등, 같음) 할당 연산자가 아닙니다. 비교에만 사용됩니다. 제네릭 연산자입니다.
>(>) 제네릭 연산자입니다.
<(보다 작음) 제네릭 연산자입니다.
>=(크거나 같음) 제네릭 연산자입니다.
<=(작거나 같음) 제네릭 연산자입니다.
<>(같지 않음) 제네릭 연산자입니다.

오버로드 및 제네릭 연산자

이 항목에서 설명하는 모든 연산자는 Microsoft.FSharp.Core.Operators 네임스페이스에 정의됩니다. 일부 연산자는 정적으로 확인된 형식 매개 변수를 사용하여 정의됩니다. 즉, 해당 연산자에서 작동하는 각 특정 형식에 대한 개별 정의가 있습니다. 모든 단항 및 이진 산술 연산자와 비트 연산자는 이 범주에 있습니다. 비교 연산자는 제네릭이므로 기본 산술 형식뿐만 아니라 모든 형식에서 작동합니다. 차별화된 합집합과 레코드 타입은 F# 컴파일러에서 생성되는 고유한 사용자 정의 구현을 가지고 있습니다. 클래스 형식은 메서드 Equals사용합니다.

제네릭 연산자는 사용자 지정할 수 있습니다. 비교 함수를 사용자 지정하려면 Equals을 재정의하여 고유한 동등 비교를 제공한 다음 IComparable을 구현합니다. System.IComparable 인터페이스에는 단일 메서드인 CompareTo 메서드가 있습니다.

연산자 및 타입 유추

식에서 연산자를 사용하면 해당 연산자에 대한 형식 유추가 제한됩니다. 또한 연산자의 사용은 산술 형식을 의미하기 때문에 연산자를 사용하면 자동 일반화를 방지할 수 있습니다. 다른 정보가 없는 경우 F# 컴파일러는 int 산술 식의 형식으로 유추합니다. 다른 형식을 지정하여 이 동작을 재정의할 수 있습니다. 따라서 다음 코드의 인수 형식과 function1 반환 형식은 int유추되지만 function2 형식은 float유추됩니다.

// x, y and return value inferred to be int
// function1: int -> int -> int
let function1 x y = x + y

// x, y and return value inferred to be float
// function2: float -> float -> float
let function2 (x: float) y = x + y

더 보기