Ревич, Ю.В. Программирование микроконтроллеров AVR: от Arduino к ассемблеру

Глава 8. Арифметические операции и операции в двоично-десятичном формате 219 0,0 1 25 = 1 ,25 · 1 0- 2 , 1 254,8 1 = 1 ,2548 1 · 1 0 3 • Разумеется, в микропроцессорах все это лучше делать в двоичной форме, записы­ вая порядок как степень двух (скажем, операция выравнивания порядков при сло­ жении таких чисел сведется просто к сдвигу мантиссы). Легко заметить, что и саму запятую, и основание степени ТУ,Т можно опустить, за­ писывая в память лишь мантиссу и порядок, - конечно, если всегда помнить, что мы имеем в виду. Например, можно сделать так: отвести в памяти четыре байта, из которых первые три байта хранят величину и знак мантиссы, а четвертый отведен под порядок. Если старший бит порядка равен единице, то порядок отрицательный, а если нулю- поло жите льный, итого двоичный порядок составит диапазон от - 1 28 до + 1 27, а весь диапазон чисел в десятичном виде составит примерно от -3,4 · 1 0 38 до 3 ,4 · 1 0 38 • Число значащих десятичных цифр будет составлять около 6- 7 десятичных знаков (оно будет соответствовать целому числу 2 23 = 83 88608). В обычных языках программирования такие числа называют числами ординарной точности (в языке Pascal это тип s ingle, в стандартном С - float ) , и на персо­ нальных компьютерах давно уже не употребляют, поскольку все персоналки, как минимум, 32-разрядные, и там базовый вещественный тип - ctouЫe длиной 8 бай­ тов. Но для 8-разрядных контроллеров именно вещественные числа ординарной точности являются основными, что хорошо видно на примере компилятора AVRGCC, на котором базируется Arduino : там float и douЫe совпадают по размеру и занимают четыре байта. В некомпьютерной же электронике вещественными числами не пользуются вовсе. При необходимости их переводят в целые и обратно, умножая на соответствующую степень десяти (или двойки, как мы делали ранее), при этом все остальные участ­ вующие в расчетах величины также масштабируются в нужное число раз . Затем при выводе, к примеру, на цифровой дисплей, запятая просто устанавливается в нужном месте . Иными словами, для цифровой схемы не существует значения температуры, равного 30,8 1 градуса, а есть число 308 1 в ВСD-формате . Именно из этого мы будем исходить при работе с АVR-контроллером, в котором конечно же нет никаких команд для вещественных чисел, - их не было даже в первом IBM РС, к которому пришлось потом пристраивать специальный матема­ тический сопроцессор, чтобы аппаратно ускорить выполнение операций с вещест­ венными числами . Действия с числами с плавающей запятой (с плавающей точкой, как их называют в США) сложнее и занимают намного больше времени, чем дейст­ вия с целыми числами: при сложении, например, нужно выровнять порядки, сло­ жить мантиссы, потом результат привести к нормализованной форм � и при всех этих действиях постараться не потерять в точности. И вот еще интересный истори­ ческий факт: в советской вычислительной машине БЭСМ-6, которая в 1 960-70 годы считалась основным конкурентом американским суперкомпьютерам, не было пре­ дусмотрено, наоборот, целочисленной арифметики - там все действия производи­ лись только с действительными числами.

RkJQdWJsaXNoZXIy MTExODQxMg==