Во-первых, можно все переменные отмасштабировать так, чтобы иметь дело с целыми числами. Во-вторых, можно использовать представление с фиксированной точкой, фактически работа по-прежнему идёт как с целыми числами, просто Вы мысленно представляете себе где находится точка, отделяющая целую часть от дробной и куда она перемещается, например после операции умножения. Даже если работать с 64-разрядными целыми это получается быстрее, чем плавающая арифметика на Меге. В том и другом случае приходится держать "в уме" масштабирующие коэффициенты. А для вывода целая и дробная части выводятся как отдельные целые числа, разделённые точкой (или запятой, по вкусу). Если счёта много то выгоднее масштабировать на степень двойки, если мало счёта, а ввода/вывода в десятичном представлении много, тогда удобнее двоично-десятичное представление (каждые 4 бита хранят число от 0 до 9), или представление по основанию 100, каждый байт хранит числа от 0 до 99.
Кстати, экономии программной памяти всё это не так уж и сильно поможет, плавающая арифметика всё равно делается вызовами подпрограмм. А вот отказ от функции printf(), или хотя бы от той её части, что работает с плавающей точкой, экономит и флэшь и ОЗУ очень хорошо.
--------------------
Russia est omnis divisa in partes octo.
|