476 단어
2 분
부동소수점 타입
타입 종류
f32 / f64
여기서 f는 floating-point(부동소수점)를 의미하며, 뒤 숫자는 비트 크기를 나타냅니다.
f32: 32비트 부동소수점 (단정도, 약 7자리 십진수 정밀도)f64: 64비트 부동소수점 (배정도, 약 15자리 십진수 정밀도)
Rust에서 기본 부동소수점 타입은 f64입니다.
예시
let a = 3.14; // 기본 f64로 추론let b: f32 = 2.5; // 명시적으로 f32 지정let c = 5f32; // 숫자 뒤에 타입 붙이기부동소수점 특징
정밀도
f32보다 f64가 훨씬 더 많은 유효 숫자를 정확히 표현할 수 있습니다.
let x: f32 = 1.123456789;let y: f64 = 1.1234567890123456;
println!("{}", x); // 1.1234568 (정밀도 손실)println!("{}", y); // 1.1234567890123457특수 값
부동소수점에는 정수형에는 없는 특별한 값이 있습니다.
let nan = f64::NAN; // 숫자가 아님(Not a Number)let inf = f64::INFINITY; // 양의 무한대let ninf = f64::NEG_INFINITY; // 음의 무한대
assert!(nan.is_nan());assert!(inf.is_infinite());많이 쓰는 메서드
powf
수를 원하는 수로 거듭제곱합니다.
assert_eq!(2f32.powf(3.0), 8.0);assert_eq!(f64::powf(9.0, 0.5), 3.0);sqrt
제곱근을 구합니다.
assert_eq!(9f64.sqrt(), 3.0);round
반올림합니다.
assert_eq!(3.6f32.round(), 4.0);assert_eq!(3.3f32.round(), 3.0);floor / ceil
floor: 내림ceil: 올림
assert_eq!(3.7f32.floor(), 3.0);assert_eq!(3.3f32.ceil(), 4.0);abs
절댓값을 구합니다.
assert_eq!((-5.5f64).abs(), 5.5);is_nan
값이 NaN(Not a Number)인지 확인합니다.
let x = 0.0 / 0.0;assert_eq!(x.is_nan(), true);is_finite / is_infinite
is_finite: 유한한 수인지 확인is_infinite: 무한대인지 확인
assert_eq!(5f64.is_finite(), true);assert_eq!(f64::INFINITY.is_infinite(), true);주의할 점
- 부동소수점은 완벽한 정확성이 보장되지 않습니다. (이진 부동소수점의 한계)
- 비교할 때는 정확한 일치보다는 오차 허용 범위를 두는 것이 안전합니다.
let a = 0.1f64 + 0.2f64;assert!((a - 0.3).abs() < f64::EPSILON); // 안전한 비교