https://www.acmicpc.net/problem/1008
Rust의 f64 개념을 알기에 정말 좋은 문제라고 생각한다.

해당 문제에서 Rust의 출력 값의 자료형을 f64로 주었을 때,
아래와 같이 나오게 된다.
| 입력 | 출력 |
| 1 3 | 0.33333333333333331482961625624739 |
| 4 5 | 0.80000000000000004440892098500626 |
이거는 Rust의 버그가 아니다.
이것은 부동소수점(f64)의 저장방식(IEEE 754) 때문에 생기는 정상적인 현상이다.
파이썬에서도 0.1과 0.2를 더하는 경우 0.3으로 정확히 나오지 않는다.

Rust에서는 어떻게 저장되는지 자세히 살펴보자.
우리는 10진수의 소수점으로 0.1 0.2 0.8을 생각한다.
하지만 컴퓨터의 f64는 2진수로 저장한다.
즉, f64는 2진수로 표현한 값을 비트 수로 잘라서 저장한다.
"응? 근데 1/3은 무한소수니까 그럴 수 있다고 치는데, 4/5는?" 이라는 의문이 들 수 있다.
이진 부동소수점에서 정확히 표현 가능한 값은 분모가 2의 거듭제곱으로만 이루어진 경우 뿐이다.
5가 들어가는 4/5(0.8)는 2진수로 무한 반복되어 근사 저장된다.
| [세상에서 가장 쉬운 러스트 백엔드 with Axum] 섹션 1. 러스트와 서버 개발 (0) | 2025.07.15 |
|---|---|
| [이펙티브 러스트] Chapter 1. 타입 (0) | 2025.07.14 |
댓글 영역