🔥 부동 소수점 숫자

417자
5분

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

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

Swift의 부동 소수점 숫자 타입

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

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

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

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

부동 소수점 숫자 사용 예시

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

swift
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
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

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

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

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

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

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

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

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

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

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

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

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

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

YouTube 영상

채널 보기
Pro펑터, 입력과 출력을 동시에 다루는 펑터 | 프로그래머를 위한 카테고리 이론
NestJS 빌트인 파이프 ParseIntPipe, ParseUUIDPipe 사용하기 | NestJS 가이드
NestJS 커스텀 예외 만들기 - 에러 처리 깔끔하게 하는 법 | NestJS 가이드
매번 ValidationPipe 복붙하세요? NestJS 전역 파이프로 한 번에 해결하기 | NestJS 가이드
존 매카시가 들려주는 인공지능의 탄생 이야기
미들웨어 vs 가드, 왜 NestJS에서는 가드가 더 똑똑할까? | NestJS 가이드
클로드 섀넌이 들려주는 정보 이론 이야기
변환 파이프로 컨트롤러 코드 깔끔하게 만들기 | NestJS 가이드