🔥 부동 소수점 숫자

417자
5분

부동 소수점 숫자(Floating-Point Numbers)는 소수점 이하의 값을 가지는 숫자를 말합니다. 예를 들어 3.14159, 0.1, -273.15 등이 있죠.

부동 소수점 숫자는 정수형보다 훨씬 넓은 범위의 값을 표현할 수 있습니다. 정수형으로 저장할 수 없는 아주 큰 값이나 작은 값도 부동 소수점 숫자로는 저장할 수 있어요.

Swift의 부동 소수점 숫자 타입

Swift는 두 가지 종류의 부호 있는 부동 소수점 숫자 타입을 제공합니다.

  • Double: 64비트 부동 소수점 숫자를 나타냅니다.
  • Float: 32비트 부동 소수점 숫자를 나타냅니다.

Double은 최소 15자리의 십진수 정밀도를 가지고, Float은 6자리 정도의 십진수 정밀도를 가집니다. 코드에서 어떤 부동 소수점 타입을 사용할지는 다루고자 하는 값의 특성과 범위에 따라 결정하면 됩니다.

만약 두 타입 중 어느 것을 써도 무방한 상황이라면 Double을 선호하는 것이 좋습니다. Double이 더 높은 정밀도를 제공하기 때문이에요.

부동 소수점 숫자 사용 예시

아래는 DoubleFloat을 사용한 간단한 예시 코드입니다.

let pi: Double = 3.14159 // Double 타입의 pi 변수 선언 및 초기화
let e: Float = 2.71828 // Float 타입의 e 변수 선언 및 초기화
 
let sum = pi + Double(e) // Double과 Float 사이의 타입 변환 및 덧셈 연산
print(sum) // 5.85987
swift

위 코드에서 piDouble 타입으로, eFloat 타입으로 선언 및 초기화했습니다.

DoubleFloat 사이에 연산을 하려면 먼저 타입을 일치시켜야 합니다. 여기서는 Float 타입인 eDouble(e)Double 타입으로 변환한 뒤 덧셈을 수행했어요.

부동 소수점 숫자의 비교 연산 주의점

부동 소수점 숫자는 정확한 값을 표현하기 어려운 한계가 있습니다. 예를 들어 0.1을 정확히 2진수로 표현할 수 없기에 근사치로 저장되죠. 따라서 부동 소수점 숫자로 비교 연산을 할 때는 주의해야 합니다.

let a = 0.1 + 0.2 // 0.30000000000000004
let b = 0.3 // 0.29999999999999998
 
print(a == b) // false
swift

위처럼 직관적으로는 ab가 같아 보이지만, 실제로는 미세한 차이가 있어 false로 비교됩니다.

따라서 부동 소수점 숫자의 비교는 대신 오차 범위 내에 있는지를 검사하는 것이 좋습니다.

let tolerance = 0.00001
 
if abs(a - b) < tolerance {
  print("a와 b는 같다고 볼 수 있습니다.")
} else {
  print("a와 b는 다릅니다.")
}
// a와 b는 같다고 볼 수 있습니다.
swift

abs()는 절댓값을 구하는 함수입니다. ab의 차이의 절댓값이 오차 허용 범위인 tolerance보다 작으면 같다고 간주하는 거죠.

이번 글에서는 Swift의 부동 소수점 숫자에 대해 알아봤습니다. 주요 내용을 정리하면 다음과 같아요.

  • 부동 소수점 숫자는 소수점 이하의 값을 가지는 숫자를 말합니다.
  • Swift는 DoubleFloat 두 가지 부동 소수점 숫자 타입을 제공합니다.
  • 부동 소수점 숫자는 정확한 값 표현에 한계가 있으므로, 비교 연산 시 주의해야 합니다.
  • 비교 연산은 오차 범위 내에 있는지를 검사하는 것이 좋습니다.

부동 소수점 숫자를 다룰 때는 작은 오차를 고려해야 하지만, 일상적인 계산에서는 크게 문제될 것이 없으니 걱정 마세요!