개발 이야기3분 읽기

20도의 두 배는 40도가 아니다

온도에는 곱셈이 통하지 않고 갤런은 나라마다 다릅니다. 단위 변환에서 어긋나는 자리를 정리했습니다.

단위 변환은 곱하기 하나로 끝날 것 같습니다. 몇 가지는 그렇지 않습니다.

온도에는 비율이 없다

  0°C =  32.0°F
 20°C =  68.0°F
 40°C = 104.0°F

20°C의 두 배는 40°C인데, 68°F의 두 배는 136°F이고 40°C는 104°F입니다. 안 맞습니다.

섭씨와 화씨는 영점이 임의로 정해진 눈금이라 비율이 의미를 갖지 않습니다. 변환식에 덧셈이 들어갑니다.

°F = °C × 9/5 + 32

이 덧셈 때문에 "온도를 10% 올려라" 같은 요구가 단위마다 다른 결과를 냅니다. 절대영도를 기준으로 하는 켈빈에서만 비율이 성립합니다.

단위 변환기를 만들 때 길이·무게·부피는 계수 하나로 처리되지만 온도만 따로 다뤄야 하는 이유입니다.

정의된 값과 재서 얻은 값

1 인치 = 2.54 cm            정확한 정의값 (1959년 국제 야드·파운드 협정)
1 파운드 = 0.45359237 kg    정확한 정의값
1 해리 = 1852 m             정확한 정의값

이 값들은 근사가 아닙니다. 협정으로 그렇게 정의한 것이라 소수점 아래가 무한히 이어지지 않습니다.

반면 물리 상수에서 유도되는 값은 상수 자체가 정의값인지에 달려 있습니다. 빛의 속도는 1983년부터 정확히 299,792,458 m/s로 정의됐으므로 광년도 정확한 값입니다.

1 광년 = 9.460730e+15 m

1킬로바이트는 몇 바이트인가

SI    1 kB  = 1000 바이트
IEC   1 KiB = 1024 바이트

접두어가 커질수록 차이가 벌어집니다.

K: 1024^1 대 1000^1 → 2.4%
M: 1024^2 대 1000^2 → 4.9%
G: 1024^3 대 1000^3 → 7.4%
T: 1024^4 대 1000^4 → 10.0%
P: 1024^5 대 1000^5 → 12.6%

500 GB 디스크를 OS가 세면 465.7 GiB로 보입니다. 6.9% 차이이고, 이것이 "표기 용량보다 작다"는 인상의 대부분입니다.

관행도 갈립니다. 저장 장치 제조사는 1000 기준, 운영체제는 대체로 1024 기준, 네트워크 속도는 1000 기준입니다. RAM은 하드웨어 구조상 1024 기준입니다.

같은 이름, 다른 값

1 미국 갤런 = 3.785411784 L
1 영국 갤런 = 4.54609 L          20% 차이

1 미국 온스(액량) = 29.5735 mL
1 영국 온스(액량) = 28.4131 mL

1 미터톤   = 1000 kg
1 미국 숏톤 = 907.18474 kg
1 영국 롱톤 = 1016.0469088 kg

"갤런"이라고만 적힌 값은 어느 갤런인지 알 수 없습니다. 연비를 mpg로 주고받을 때 이 차이가 그대로 들어갑니다.

무게 온스와 액량 온스도 다른 단위입니다 — 하나는 질량, 하나는 부피입니다. 이름이 같아서 자동 변환기가 섞기 쉬운 자리입니다.

부동소수점

1 을 인치↔cm 로 100번 왕복 → 1
0.1 + 0.2 = 0.30000000000000004

2.54로 곱하고 나누기를 100번 반복해도 1이 유지됐습니다. 나누기가 곱하기를 정확히 되돌리는 값이었기 때문입니다. 모든 계수가 그렇지는 않습니다.

변환 계수를 곱셈으로만 표현하면(예: cm→인치를 × 0.393701) 왕복 오차가 쌓입니다. 나눗셈으로 되돌릴 수 있는 정의값을 쓰는 편이 낫습니다 — / 2.54× 0.393701보다 정확합니다.

확인 순서

  1. 온도 변환이 다른 단위와 같은 코드 경로를 타지 않는지 봅니다. 덧셈이 필요합니다
  2. 바이트 단위를 표시할 때 1000인지 1024인지 정하고 단위 표기를 맞춥니다 — kB와 KiB
  3. 갤런·온스·톤처럼 지역마다 다른 단위는 어느 계통인지 함께 저장합니다
  4. 변환 계수는 정의값을 나눗셈으로 쓰는 편이 왕복에 유리합니다
  5. 표시 자릿수를 정합니다. 유효숫자 없이 소수점을 길게 늘리면 정밀도가 있는 것처럼 보입니다

tools.onuel.dev단위 변환기는 길이·무게·데이터·넓이·부피·속도·각도·온도를 다루고, 한 쌍이 아니라 그 분류의 모든 단위를 한 번에 보여 줍니다. 갤런 계통 차이나 kB·KiB 차이를 나란히 확인할 수 있습니다. 시간 쪽은 기간 변환기시간대 변환기로 나뉘어 있고, 진법이 걸리면 진법 변환을 씁니다.

  • #단위
  • #변환
  • #계산