Как поплавки вычисляются на машине без FPU - PullRequest
3 голосов
/ 30 января 2012

C язык имеет тип данных float.Некоторые машины имеют процессор с плавающей запятой, который выполняет все вычисления с плавающей запятой.Мой вопрос: могут ли быть некоторые машины без процессора с плавающей запятой?Как такие машины используют числа с плавающей запятой?

Ответы [ 5 ]

7 голосов
/ 30 января 2012

Многие небольшие контроллеры не имеют блоков с плавающей запятой. В этом случае есть библиотека программного обеспечения с плавающей запятой.

В середине 1980-х мы считали себя счастливыми, если бы в нашей системе было 8087, FPU для 8086 и 8088. К сожалению, наше программное обеспечение должно было работать правильно, если 8087 присутствовал или нет. Это означало перехват и эмуляцию инструкций 8087, если они отсутствовали.

3 голосов
/ 30 января 2012

Вы обнаружите, что почти все современные настольные компьютеры и серверы имеют FPU.

Высокопроизводительные мобильные устройства начали включать FPU, но не все из них имеют их.И если мы говорим о мобильных устройствах, отличных от high-end, вы не найдете много устройств с FPU.

Во многих приложениях можно выполнять арифметику с дробными числами, используя "арифметику с фиксированной точкой"- это не требует FPU.

В других случаях вы можете делать ту же математику, что и FPU, но это займет больше времени, когда вам придется создавать его самостоятельно из других арифметических примитивов, а неЗа вас заботится сложный чип.

Мой любимый пример моделирования с плавающей запятой на процессорах с фиксированной запятой представлен в MMIXware Дональда Кнута , полное моделирование процессора в очень портативном C.

3 голосов
/ 30 января 2012

Стандарт c допускает плавающие точки.

Ответственность за перевод его на конкретную аппаратную архитектуру лежит на компиляторе.

Если аппаратный набор инструкций поддерживает числа с плавающей запятой [и большинство современных машин поддерживают], то - компилятор, скорее всего, будет его использовать.

В противном случае ему придется создать код на родном языке, который самостоятельно моделирует поведение с плавающей запятой. Как это сделать? Вы можете прочитать больше о плавающих точках на странице википейда и в этой более подробной статье о арифметике с плавающей точкой

3 голосов
/ 30 января 2012

Вплоть до 486SX включительно, ни у одного процессора не было встроенного блока FPU.

Что касается микроконтроллеров, большинство из них не имеют блока FPU.

1 голос
/ 30 января 2012

Эмуляция числа с плавающей запятой немного медленная, но теоретически довольно простая.Примерно так же, как большинство людей учились в средней школе или около того: у вас есть число с показателем степени.Чтобы сложить или вычесть, нужно откорректировать числа, чтобы они имели одинаковые показатели, а затем сложить / вычесть мантиссы.Чтобы умножить или разделить, вы умножаете / делите мантиссы и складываете / вычитаете экспоненты.

Когда вы закончите, вы нормализуете результат.В старших классах школы мы использовали десятичную дробь и обычно требовали ровно одну цифру перед десятичной запятой, поэтому (например) 10001 записывалось бы как 1,0001 x 10 4 .На компьютере детали немного отличаются (например, мы имеем дело с двоичным, а не с десятичным), но основная идея почти такая же.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...