Вопрос не «точно или приблизительно», а «точно в какой системе счисления»
Самая полезная переформулировка всей темы дробей.
- Двоичная точна для половин, четвертей, восьмых — и приблизительна для десятых и сотых.
- Десятичная точна для десятых и сотых — то есть для денег.
1/3не выражается точно ни в одной; для неё нужна пара «числитель/знаменатель».
Отсюда прямо следует, зачем языку three-number-types: не потому, что «один точный, другой быстрый», а потому что у каждого своё основание и свой класс чисел, которые он представляет точно.
Как этим пользоваться при споре. Когда кто-то предлагает «просто хранить число как пару целых» — это верно, и вопрос сразу становится конкретным: пара чего? Мантисса и десятичный масштаб дают точные деньги. Числитель и знаменатель дают точное деление. Биты мантиссы и двоичный показатель — это и есть double, который уже есть.
Связано: floating-point-bits-are-exact, exact-decimals-are-free