Все мы знаем, как неудобно хранить дробные переменные. Компьютер переводит их в отвратительные двоичные дроби, и получить точные значения где-либо невозможно. 0.1 + 0.1 != 0.2...
Есть у меня некоторые идеи по этому поводу. А что, если хранить дроби в памяти компьютера так же, как мы храним их, когда считаем что-то на бумажке? Числитель отдельно, знаменатель отдельно... То есть создать структуру ratio (дробь), содержащую два поля-переменных: numerator (числитель) и denominator (знаменатель). Определить все операторы. Важное замечание: после каждой операции, изменяющей нашу дробную переменную, дробь полезно сокращать.
Теперь я могу спокойно идти писать программу, считающую определитель матрицы (приводя ее к диагональному виду), не боясь, что из-за дробей у меня получится неточное значение определителя...