부동소수점

부동소수점 (Floats)

부동소수점 타입은 Float32Float64 두 가지가 있어요. 두 타입은 IEEE가 정의한 binary32binary64 타입에 각각 대응돼요.

부동소수점 리터럴은 선택적인 + 또는 - 부호로 시작해요. 그다음 숫자나 언더스코어의 나열, 점, 숫자나 언더스코어의 나열, 선택적인 지수 접미사, 선택적인 타입 접미사가 이어져요. 접미사가 없으면 리터럴의 타입은 Float64예요.

1.0     # Float64
1.0_f32 # Float32
1_f32   # Float32

1e10   # Float64
1.5e10 # Float64
1.5e-7 # Float64

+1.3 # Float64
-0.5 # Float64

접미사 앞의 언더스코어 _는 생략 가능해요.

언더스코어는 어떤 숫자를 더 읽기 좋게 만드는 데 쓸 수 있어요:

1_000_000.111_111 # a lot more readable than 1000000.111111, yet functionally the same

출처: Crystal 공식 문서

본문

부동소수점 리터럴의 구조를 다시 정리하면, ±숫자들.숫자들[지수][타입접미사] 형태예요. 각 부분이 무엇을 뜻하는지 하나씩 뜯어볼게요.

  • 부호: +-는 선택 사항이에요. 생략하면 양수로 취급돼요.
  • 정수부와 소수부: 점(.)을 기준으로 양쪽에 숫자나 언더스코어가 와요.
  • 지수 접미사: 1e10, 1.5e10, 1.5e-7처럼 e(또는 E) 다음에 지수를 써서 큰 수나 작은 수를 간편하게 표현할 수 있어요.
  • 타입 접미사: _f32를 붙이면 Float32, 붙이지 않으면 Float64가 돼요.

언더스코어는 자리수 구분자 역할만 할 뿐 값에는 영향을 주지 않아요. 그래서 1_000_000.111_111처럼 크고 복잡한 숫자를 가독성 좋게 적을 수 있어요.

Crystal은 부동소수점 타입을 IEEE 754에 따라 다루기 때문에, 대부분의 언어에서와 동일한 동작을 기대할 수 있어요.

더 알아보기

  • 부동소수점 리터럴은 _f32 접미사로 Float32를, 기본값으로 Float64를 만들어요.
  • 지수 표기(1e10, 1.5e-7)와 언더스코어 구분자(1_000_000.111_111)를 활용해 가독성을 높일 수 있어요.
  • Float32·Float64는 IEEE의 binary32·binary64에 각각 대응돼요.