부동소수점
부동소수점 (Floats)
부동소수점 타입은 Float32와 Float64 두 가지가 있어요. 두 타입은 IEEE가 정의한 binary32와 binary64 타입에 각각 대응돼요.
부동소수점 리터럴은 선택적인 + 또는 - 부호로 시작해요. 그다음 숫자나 언더스코어의 나열, 점, 숫자나 언더스코어의 나열, 선택적인 지수 접미사, 선택적인 타입 접미사가 이어져요. 접미사가 없으면 리터럴의 타입은 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에 각각 대응돼요.