276/304 = 69/76 - это повторяющееся десятичное число как для основания 10, так и для основания 2.
- десятичное число: 0,90 (789473684210526315)
- двоичный: 0,11 (101000011010111100)
Таким образом, результат округляется, и умножение на знаменатель может не привести к оригинальному числителю. Более распространенным примером такой ситуации является 1/3 * 3 = 0,33333333 * 3 = 0,999999999.
То, что версия double
дает точный ответ, является просто совпадением. Ошибка округления в умножении как раз и устраняет ошибку округления в делении.
Если этот результат сбивает с толку, возможно, вы слышали, что «double
имеет ошибки округления и decimal
является точным». Но decimal
является точным только при представлении десятичных дробей, таких как 0,1 (что составляет 0,0 0011 0011 ... в двоичном виде). Если у вас в знаменателе коэффициент 19, это вам не поможет.