41.1. АРИФМЕТИКА С ФИКСИРОВАННОЙ ТОЧКОЙ



THIS SECTION IS UNDER CONSTRUCTION


F-формат

Числа с фиксированной точкой F-формата напоминают целые числа, в которых где то находится точка.

Числа могут быть знаковыми/беззнаковыми. Еще может быть вариант с выделенным знаком. Например для четырехбитных чисел с фиксировнной точкой. Беззнаковый: -------------------- 2^1 2^0 . 2^-1 2^-2 -------------------- 00.00 = 0 00.01 = 0.25 00.10 = 0.5 00.11 = 0.75 01.00 = 1 01.01 = 1.25 .... 11.11 = 3.75 -------------------- Знаковый: -------------------- 2^1 2^0 . 2^-1 2^-2 -------------------- 00.00 = 0 00.01 = 0.25 ... 01.00 = 1 ... 01.11 = 1.75 11.11 = -0.25 11.10 = -0.5 11.01 = -0.75 11.00 = -1 10.00 = -2 -------------------- С выделенным знаком: -------------------- S 2^0 . 2^-1 2^-2 -------------------- 00.00 = 0 00.01 = 0.25 ... 01.00 = 1 .. 01.11 = 1.75 10.00 = -0 10.01 = -0.25 ... 11.00 = -1 ... 11.11 = -1.75 ---------------------

Арифметика с фиксированной точкой: Сложение

XXXX.XX + XXXX.XX -------------- XXXX.XX XXXX.XX - XXXX.XX -------------- XXXX.XX


Умножение



XXXX.XX * XXXX.XX -------------- XXXXXX XXXXXX XXXXXX XXXXXX XXXXXX XXXXXX --------------- XXXXXXXX.XXXX


Q-формат

У чисел с фиксированной точкой те же проблемы что у целых чисел: переполнение при сложении и переполнение при умножение (если результат должен уместиться в разрядную сетку того же размера. От переполенения при умножении можно избавиться если представлять числа не более чем единица по модулю тогда: A * B < MIN(A,B) например: 0.6 * 0.2 = 0.12 0.9 * 0.9 = 0.81 0.1 * 0.1 = 0.01

Q-format чисел с фиксированной применяется в основном в DSP (например в выпускаемых TI) ----------------------------------- -2^0 . 2^-1 2^2 ...... 2^(-N+1) веса разрядов ----------------------------------- -1 0.5 0.25 ..... веса разрядов ----------------------------------- Q формат позволяет представлять числа в диапазоне -1 <= X < 1 -------------------------------------------------- Тип числа Q16 Q32 Разрядность бит 16 32 Largest (positive) 1-2^-15 1-2^-31 Smallest (positive) 2^-15 2^-31 Smallest (negative) -1 -1 --------------------------------------------------- Самое большое число имеет вид 0.11..11 = 1-2^-(N-1) Самое маленькое число имеет вид 1.00..00 = -1 Рассмотрим трехбитные числа в Q-формате: -------------- 0.00 0 0.01 0.25 0.10 0.5 0.11 0.75 1.00 -1 1.01 -0.75 1.10 -0.5 1.11 -0.25 -------------- Сложение/вычитание в Q-формате происходит как с обычными числами. При этом как правило используют арифметеку с насыщением. 0.100 + 0.100 = 1 (не представимо) = 0.111 насыщение. Умножение выполняется как для знаковых чисел (т.е используя расширение знака).

0.100 * 0.100 = 0.010 все ok Но все равно при умножении возникает проблема - есть один частный случай: 1.000 * 1.000 = 1 (не представимо) -1.0 * -1.0 = 1 (а 1.0 - непредставимо в Q-формате) Поэтому для этого случая тоже используют насыщение.

Таким образом алгоритм умножения получается: Умножить знаково Сдвиг влево на 1 позицию Если биты знака равны 01 то сделать насыщение.

Index Prev Next