|
|
  |
целочисленная арифметика |
|
|
|
Feb 27 2006, 10:59
|
Участник

Группа: Новичок
Сообщений: 16
Регистрация: 7-12-05
Пользователь №: 11 925

|
Вопрос, конечно, интересный!  Что-нибудь о Fixed point representation написано в описании АЛУ любого процессора. Применительно к теме форума есть интересная книга "The Scientist and Engineer’s Guide to Digital Signal Processing", где в начале 4-ой главы пару страниц отведено для описания представления целых чисел в цифровом компьютере. Книгу можно скачать тут http://www.dspguide.com.
|
|
|
|
|
Feb 27 2006, 20:23
|

Местный
  
Группа: Свой
Сообщений: 262
Регистрация: 18-12-05
Из: Perth, WA
Пользователь №: 12 375

|
Спасибо за ссылку. А вообще, может быть я плохо искал, но мне попадались либо общие слова или научные теоретизмы, слабо связанные с реальным миром. Хотя на руках уменя появилась более-менее подходящая книжка: Р.Грегори, Е.Кришнамурти "Безошибочные вычисления. Методы и приложения", 1988.
--------------------
"We choose to go to the moon in this decade and do the other things, not because they are easy, but because they are hard," - John F. Kennedy in September 1962.
|
|
|
|
|
May 5 2006, 13:05
|
Участник

Группа: Свой
Сообщений: 63
Регистрация: 5-05-06
Пользователь №: 16 804

|
Obi, а что тебе нужно? Я занимался целочисленной реализацией заведомо FP-алгоритмов. Могу подсказать .
|
|
|
|
|
May 23 2006, 07:04
|

Патриот
  
Группа: Свой
Сообщений: 384
Регистрация: 26-12-04
Пользователь №: 1 682

|
Цитата(AndrewKirs @ May 5 2006, 17:05)  Obi, а что тебе нужно? Я занимался целочисленной реализацией заведомо FP-алгоритмов. Могу подсказать . Хотелось бы узнать общие действия или рекомендации по переводу FP-алгоритмов в целочисленные. Сейчас тоже подхожу к этому - хотелось бы послушать опытных. Заранее спасибо.
|
|
|
|
|
May 23 2006, 16:47
|
Участник

Группа: Свой
Сообщений: 63
Регистрация: 5-05-06
Пользователь №: 16 804

|
Например, так. FP-число хранится как два integer. Первый содержит целую часть, второй - дробную в целочисленных терминах. Скажем, на нее выделяется 16 бит, из которых старший используется для проверки переполнения. Остается 15 бит (dec=0..32767 или hex=0..7FFF), и числу 0.5 будет соответствовать 3FFF. Налицо некоторая потеря точности, поэтому надо аккуратно смотреть, сколько бит нужно.
Дальше операции ведутся параллельно над целой и дробной частями. То есть сложение двух FP-чисел сведется к сложению отдельно целых и дробных частей. Для дробных надо анализировать старший бит. Если он равен 1, значит произошло переполнение => увеличиваем на 1 целую часть и обнуляем старший бит дробной.
|
|
|
|
|
Jun 15 2006, 09:41
|
Участник

Группа: Свой
Сообщений: 63
Регистрация: 5-05-06
Пользователь №: 16 804

|
Была такая книга: В.К.Злобин, В.Л.Григорьев Программирование арифметических операций в микропроцессорах, М.,"Высшая школа", 1991, 303 стр. Возможно сейчас, когда сканируют все подряд, она найдется где-нибудь в электронном виде. Там описаны процессор 8086/8087, стандарт IEEE-754 и приведены алгоритмы целочисленной реализации операций с плавающей точкой (на ассемблере 8086).
Что касается Кнута, то это, конечно, классик. Но применить высокую теорию в нашей приземленной практике не всегда так уж просто.
|
|
|
|
|
Jun 23 2006, 13:59
|

Ambidexter
    
Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282

|
Цитата(AndrewKirs @ May 23 2006, 15:47)  Например, так. FP-число хранится как два integer. Первый содержит целую часть, второй - дробную в целочисленных терминах. Скажем, на нее выделяется 16 бит, из которых старший используется для проверки переполнения. Остается 15 бит (dec=0..32767 или hex=0..7FFF), и числу 0.5 будет соответствовать 3FFF. Налицо некоторая потеря точности, поэтому надо аккуратно смотреть, сколько бит нужно.
Дальше операции ведутся параллельно над целой и дробной частями. То есть сложение двух FP-чисел сведется к сложению отдельно целых и дробных частей. Для дробных надо анализировать старший бит. Если он равен 1, значит произошло переполнение => увеличиваем на 1 целую часть и обнуляем старший бит дробной. Тут вы немного перегнули палку. Сложение двух FixedPoint чисел m.n не сводится к отдельному сложению целых и дробных частей. Достаточно такие числа складывать, как целые числа m+n разрядности. Точка в результате (m+1).n будет на том же самом месте. Все переносы между целыми и дробными частями осуществляются автоматически.
--------------------
Делай сразу хорошо, плохо само получится
|
|
|
|
|
Jun 28 2006, 09:39
|
Участник

Группа: Свой
Сообщений: 63
Регистрация: 5-05-06
Пользователь №: 16 804

|
Цитата(=GM= @ Jun 23 2006, 17:59)  Тут вы немного перегнули палку. Сложение двух FixedPoint чисел m.n не сводится к отдельному сложению целых и дробных частей. Достаточно такие числа складывать, как целые числа m+n разрядности. Точка в результате (m+1).n будет на том же самом месте. Все переносы между целыми и дробными частями осуществляются автоматически. Это я несколько упрощенно написал, т.к.не хотел загромождать деталями. На самом деле, у меня FP-число хранится как два 16-битных WORD. Все это хозяйство реализуется на MMX, и в одном его 64-битном регистре хранится 4 таких вот дробных части, а в другом - 4 целых. Тот же алгоритм (билинейная интерполяция) перенесен на SSE2, там регистр в два раза больше, поэтому влезает по 8 штук. Соответственно, старший бит используется под проверку переполнения.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|