Просмотрите круги номера фиксированной точки

В этом примере показано, как задать дополнительное целое число two со знаком и без знака и числа фиксированной точки.

Определения номера фиксированной точки

Этот пример иллюстрирует определения и signed-two's-complement чисел целочисленной и фиксированной точки без знака.

Целые числа без знака.

Беззнаковое целое представлено в системе двоичного числа следующим образом. Пусть

b = [b(n) b(n-1) ... b(2) b(1)]

будьте двоичными цифрами n-bit беззнакового целого, где каждый b (i) является любой единицей или нулем. Затем значение b

u = b(n)*2^(n-1) + b(n-1)*2^(n-2) + ... + b(2)*2^(1) + b(1)*2^(0)

Например, давайте зададим 3-битный квантизатор беззнаковых целых чисел и давайте перечислим его область значений.

originalFormat = get(0, 'format'); format

q = quantizer('ufixed',[3 0]);
[a,b] = range(q);
u = (a:eps(q):b)'

% Now, let's display those values in binary.
b = num2bin(q,u)
u =

     0
     1
     2
     3
     4
     5
     6
     7


b =

  8x3 char array

    '000'
    '001'
    '010'
    '011'
    '100'
    '101'
    '110'
    '111'

Круг номера Целого числа без знака.

Давайте выстроим их вокруг циферблата с их соответствующими двоичными и десятичными значениями.

fidemo.numbercircle(q);

Фиксированная точка без знака.

Значения фиксированной точки без знака являются беззнаковым целым, которое масштабируется степенью двойки. Мы вызываем отрицательную экспоненту степени двойки "fractionlength".

Если беззнаковое целое u задано как прежде, и fractionlength является f, то значение номера фиксированной точки без знака

  uf = u*2^-f

Например, давайте зададим 3-битный квантизатор фиксированной точки без знака с fractionlength 1 и давайте перечислим его область значений.

q = quantizer('ufixed',[3 1]);
[a,b] = range(q);
uf = (a:eps(q):b)'

% Now, let's display those values in binary.
b = num2bin(q,uf)
uf =

         0
    0.5000
    1.0000
    1.5000
    2.0000
    2.5000
    3.0000
    3.5000


b =

  8x3 char array

    '000'
    '001'
    '010'
    '011'
    '100'
    '101'
    '110'
    '111'

Круг номера фиксированной точки без знака.

Давайте выстроим их вокруг циферблата с их соответствующими двоичными и десятичными значениями.

fidemo.numbercircle(q);

Дробная фиксированная точка без знака.

Дробные числа фиксированной точки без знака являются числами фиксированной точки, кто fractionlength f, равно wordlength n, который производит масштабирование, таким образом, что область значений чисел между 0 и 1 2\U 005E\f, включительно. Это - наиболее распространенная форма чисел фиксированной точки, потому что она имеет хорошее свойство, которого все числа меньше один, и продукт двух чисел, меньше чем один - номер меньше чем один, и таким образом, умножение не переполняется.

Таким образом определение дробной фиксированной точки без знака совпадает с фиксированной точкой без знака с ограничением, что f=n, где n является wordlength в битах.

  uf = u*2^-f

Например, давайте зададим 3-битный дробный квантизатор фиксированной точки без знака, который подразумевает fractionlength 3.

q = quantizer('ufixed',[3 3]);
[a,b] = range(q);
uf = (a:eps(q):b)'

% Now, let's display those values in binary.
b = num2bin(q,uf)
uf =

         0
    0.1250
    0.2500
    0.3750
    0.5000
    0.6250
    0.7500
    0.8750


b =

  8x3 char array

    '000'
    '001'
    '010'
    '011'
    '100'
    '101'
    '110'
    '111'

Дробный круг номера фиксированной точки без знака.

Давайте выстроим их вокруг циферблата с их соответствующими двоичными и десятичными значениями.

fidemo.numbercircle(q);

Two's-дополнительные Целые числа со знаком.

Целые числа со знаком представлены в two's-дополнении в системе двоичного числа следующим образом. Пусть

b = [b(n) b(n-1) ... b(2) b(1)]

будьте двоичными цифрами n-bit целого числа со знаком, где каждый b (i) является любой единицей или нулем. Затем значение b

s = -b(n)*2^(n-1) + b(n-1)*2^(n-2) + ... + b(2)*2^(1) + b(1)*2^(0)

Обратите внимание на то, что различием между этим и номером без знака является отрицательный вес на больше-всего-значимом-бите (MSB).

Например, давайте зададим 3-битный квантизатор целого числа со знаком и давайте перечислим его область значений.

q = quantizer('fixed',[3 0]);
[a,b] = range(q);
s = (a:eps(q):b)'

% Now, let's display those values in binary.
b = num2bin(q,s)

% Note that the most-significant-bit of negative numbers is 1, and positive
% numbers is 0.
s =

    -4
    -3
    -2
    -1
     0
     1
     2
     3


b =

  8x3 char array

    '100'
    '101'
    '110'
    '111'
    '000'
    '001'
    '010'
    '011'

Two's-дополнительный круг целого числа со знаком.

Давайте выстроим их вокруг циферблата с их соответствующими двоичными и десятичными значениями.

Причина этого неловко выглядящего определения отрицательных чисел состоит в том, что сложение всех чисел, и положительных и отрицательных, выполняется, как будто они были все положительны, и затем n+1 несут бит, отбрасывается. Результат будет правилен, если не будет никакого переполнения.

fidemo.numbercircle(q);

Фиксированная точка со знаком.

Значения фиксированной точки со знаком являются целыми числами со знаком, которые масштабируются степенью двойки. Мы вызываем отрицательную экспоненту степени двойки "fractionlength".

Если целое число со знаком s задано как прежде, и fractionlength является f, то значение номера фиксированной точки со знаком

  sf = s*2^-f

Например, давайте зададим 3-битный квантизатор фиксированной точки со знаком с fractionlength 1 и давайте перечислим его область значений.

q = quantizer('fixed',[3 1]);
[a,b] = range(q);
sf = (a:eps(q):b)'

% Now, let's display those values in binary.
b = num2bin(q,sf)
sf =

   -2.0000
   -1.5000
   -1.0000
   -0.5000
         0
    0.5000
    1.0000
    1.5000


b =

  8x3 char array

    '100'
    '101'
    '110'
    '111'
    '000'
    '001'
    '010'
    '011'

Круг номера фиксированной точки со знаком.

Давайте выстроим их вокруг циферблата с их соответствующими двоичными и десятичными значениями.

fidemo.numbercircle(q);

Дробная фиксированная точка со знаком.

Дробные числа фиксированной точки со знаком являются числами фиксированной точки, кто fractionlength f, тот меньше, чем wordlength n, который производит масштабирование, таким образом, что область значений чисел между-1 и 1 2\U 005E\f, включительно. Это - наиболее распространенная форма чисел фиксированной точки, потому что она имеет хорошее свойство, что продукт двух чисел, меньше чем один - номер меньше чем один, и таким образом, умножение не переполняется. Единственное исключение имеет место, когда мы умножаемся-1 на-1, потому что +1 не элемент этой системы счисления. Некоторые процессоры имеют специальную инструкцию по умножению для этой ситуации, и некоторые добавляют дополнительный бит в продукте, чтобы принять меры против этого переполнения.

Таким образом определение дробной фиксированной точки со знаком совпадает с подписанной фиксированной точкой с ограничением, что f=n-1, где n является wordlength в битах.

  sf = s*2^-f

Например, давайте зададим 3-битный дробный квантизатор фиксированной точки со знаком, который подразумевает fractionlength 2.

q = quantizer('fixed',[3 2]);
[a,b] = range(q);
sf = (a:eps(q):b)'

% Now, let's display those values in binary.
b = num2bin(q,sf)
sf =

   -1.0000
   -0.7500
   -0.5000
   -0.2500
         0
    0.2500
    0.5000
    0.7500


b =

  8x3 char array

    '100'
    '101'
    '110'
    '111'
    '000'
    '001'
    '010'
    '011'

Дробный круг номера фиксированной точки со знаком.

Давайте выстроим их вокруг циферблата с их соответствующими двоичными и десятичными значениями.

fidemo.numbercircle(q);

set(0, 'format', originalFormat);
%#ok<*NOPTS,*NASGU>