Были ли попытки представить числа с числами без знака или со знаком?
Интересно, есть ли исследования и попытки разработки типа типа float ( IEEE754), где десятичная часть и целая часть обрабатываются int
или unsigned int
каждый, или любой другой вид дизайна, который может привести к тому, что с плавающей запятой реализована с помощью целых чисел.
Мне особенно любопытно изучить общие характеристики, допустимый диапазон для числового представления и т. Д. И т. Д. И все, что вы можете сказать по этому поводу.
4 ответа
Вы ищете числа с фиксированной запятой или десятичные числа с плавающей запятой? В gcc есть даже их реализация. Смотрите также эти ресурсы о десятичной арифметике.
Одним из примеров того, о чем вы спрашиваете, является арифметика с "фиксированной точкой". Если вы заметили, что в позиционной системе не имеет большого значения, где находится десятичная точка, до тех пор, пока вы правильно ее отслеживаете, вы можете решить сохранить точку в определенном месте. Это пример того, что я пытаюсь сказать, в базе 10: 123 + 456 = 579 1,23 + 4,56 = 5,79
Ну, вы можете сделать то же самое в базе 2. Решите, где ваша точка должна быть и выполнить операции. Еще в 8088 и IBM PS/2 8086 дней у меня был ассемблер, и студенты C++ рисовали таким образом простой набор Мандельброта. Ужасная точность, если вы ограничиваете размер регистров ЦП, но намного быстрее, чем эмулируемые библиотеки с плавающей запятой.
Этот сайт, кажется, содержит более подробную информацию: http://x86asm.net/articles/fixed-point-arithmetic-and-tricks/
Да, это так, особенно в старых технологиях, где в CPU не было блока с плавающей запятой. В некоторых случаях, когда вы точно знаете значения, вы можете использовать этот подход, чтобы получить некоторую скорость на этих платформах. Однако сейчас это редко, и эта практика давно умерла. Я видел его в основном в играх, где производительность критична. Подобные приемы попадают в странную практику оптимизации, когда вы пишете свой собственный sqrt или свои собственные функции преобразования float->int.
Я спросил об этом на comp.arch некоторое время назад и получил несколько действительно хороших ответов, начав с этого от доктора Маши:
|> Я задавался вопросом, использовать ли все это пространство FP для еще трех или
|> четыре целочисленных блока и поставка настраиваемых библиотек FP для каждой модели
|> заплатить за себя, но я всегда полагал, что если это можно сделать
|> Плати, дизайнеры сделали бы это. Возможно, теперь, когда суперскаляр
|> порядок дня, это будет сделано в ближайшее время.1) Есть оборудование FP, потому что если вы заботитесь о производительности FP на
все, очень сложно подражать требуемому поведению с типичным
целочисленные операции на разумной скорости. В эти дни типичные
FP add/mul имеют задержку ~2-3 такта с частотой повторения 1 цикла.2) Есть, конечно, значительный опыт работы в микропроцессоре
мир людей, поставляющих библиотеки для выполнения FP с модулем FP,
для систем, где использование FP ожидалось нечасто или где
сопроцессор FP еще не был доступен. Это было верно для
X86, 68KS, MIPS и другие. В случае MIPS:
(а) Существовали системы с R2000s сами по себе.
(б) Потом была большая сопроцессорная плата.
(c) Наконец, FPU R2010 вышел, и довольно быстро, большинство
системы имели как R2000, так и R2010. На встроенных рынках
Есть много применений для процессоров без FPU до сих пор.3) Поместить по-другому: для любых конкурентов: это действительно крутая идея
сбросьте аппаратную FP и эмулируйте с помощью целочисленных операций:-)