math — 부동소수점 수학
부동소수점 함수(math.sqrt·math.sin·math.exp …)와 그 위에 자주 쓰는 것들을 내놓는다 — 비교(close), 상수(pi·e), 각도 변환, 빗변, 밑이 있는 로그, 선형 보간. 권한은 없지만 C 수학 라이브러리에 붙으므로 호스트 전용이다 — 부동소수점 장치가 없는 대상에는 f64 가 없고, f32 는 소프트웨어로 셈한다(정본 §5.6 (4-1) — 2026-11-08 부터 AVR 에서 받는다). 이 모듈의 함수는 그런 대상에서 쓸 수 없다.
== 로 비교하지 않는다 — close 를 쓴다
guard math.close math.hyp 3.0 4.0 . 5.0 0.000001 . else return 1 . .부동소수점에서는 “같다” 가 잘 정의되지 않는다(4장). 그래서 이 모듈은 close(a, b, tol) 을 주고, 라이브러리 자신의 시험도 그것으로 판정한다.
확인이 비트가 아닌 까닭. C 수학 라이브러리는 구현마다 마지막 자리가 다를 수 있다. 정확한 비트를 주장하면 다른 기계와 다른 libc 에서 도구가 멀쩡한데 시험이 실패하는 거짓 실패가 난다. 그래서 이 모듈의 확인은 알려진 답(sin(0) = 0)과 항등식(sin²+cos² = 1, exp(log x) = x)이고 판정은 close 로 한다. 얼마나 가까우면 같다고 볼지(tol)는 부르는 쪽의 문제이지 라이브러리가 정할 것이 아니다.
| op | 하는 일 |
|---|---|
close | |a − b| ≤ tol — 이 모듈의 비교 방식 |
pi · e | 상수 |
deg_to_rad · rad_to_deg | 각도 변환 |
hyp | sqrt(x² + y²) |
log_base | 밑이 있는 로그(log x / log b) |
lerp | 선형 보간 a + (b − a)·t |
표 50.1 — math 의 op
빌트인 연산을 그대로 감싼 것 — sqrt·floor·ceil·round·sin·cos·exp·log·pow·fmod(모두 f64 를 받아 f64 를 낸다), 조각의 합 sum_seq·sum_neumaier. math.sqrt x. . 처럼 부른다. 절댓값 abs 는 기본 연산이라 모듈 없이 쓴다.
짓지 않은 것 — atan2·asin·acos·tan·log2·log10·cbrt, 복소수, 고정소수, f32 전용 얼굴. 필요해지면 빌트인 연산 하나와 이 파일 한 줄로 붙는다. hyp 는 sqrt(x²+y²) 를 그대로 셈한다 — libm 의 hypot 처럼 넘침을 피하는 재조정을 하지 않으므로 아주 큰 값에서는 다르게 답할 수 있다.