В информатике , А масштабный коэффициент является число используется в качестве множителя для представления числа на другом масштабе , функционирует аналогично с показателем в математике . Масштабный коэффициент используется, когда реальный набор чисел должен быть представлен в другом масштабе, чтобы соответствовать определенному числовому формату . Хотя использование масштабного коэффициента расширяет диапазон представляемых значений, он также снижает точность , что приводит к ошибке округления для некоторых вычислений.
Использует
Некоторые числовые форматы могут быть выбраны для приложения для удобства программирования или из-за определенных преимуществ, предлагаемых аппаратным обеспечением для этого числового формата. Например, ранние процессоры изначально не поддерживали стандарт IEEE с плавающей запятой для представления дробных значений, поэтому для хранения представлений реальных значений использовались целые числа путем применения масштабного коэффициента к реальному значению. Точно так же, поскольку аппаратная арифметика имеет фиксированную ширину (обычно 16, 32 или 64 бита , в зависимости от типа данных ), коэффициенты масштабирования позволяют представлять более крупные числа (путем ручного умножения или деления на указанный коэффициент масштабирования), хотя и за счет точности. [1] По необходимости это было сделано программно , поскольку оборудование не поддерживает дробное значение. Масштабные коэффициенты также используются в числах с плавающей запятой и чаще всего являются степенями двойки . Например, формат двойной точности выделяет 11 бит для коэффициента масштабирования ( двоичный показатель степени) и 53 бита для мантиссы , позволяя различную степень точности для представления различных диапазонов чисел и расширяя диапазон представимых чисел за пределы того, что может быть представлен с использованием 64 явных битов (хотя и за счет точности). [2]
В качестве примера потери точности 16-разрядное целое число без знака ( uint16 ) может содержать только значение 65 535 10 . Если 16-разрядные целые числа без знака используются для представления значений от 0 до 131 070 10 , тогда будет введен масштабный коэффициент 1 ⁄ 2 , так что масштабированные значения точно соответствуют реальным четным целым числам . Как следствие, например, число 3 не может быть представлено, потому что сохраненная 1 представляет реальную 2, а сохраненная 2 представляет реальную 4; недостаточно битов, чтобы избежать этой ошибки в этом представлении.
Операции с масштабируемыми значениями
После того, как масштабированное представление реального значения сохранено, масштабирование часто можно игнорировать, пока значение не вернется в «реальный мир». Например, добавление двух масштабированных значений так же верно, как и масштабирование значений, добавление реальных значений, а затем масштабирование результата, а первое намного проще и быстрее. Однако при любом подходе два добавленных числа должны масштабироваться одинаково. [3] Для других операций очень важно масштабирование.
Например, при умножении необходимо учитывать, что оба числа масштабируются. В качестве примера рассмотрим два реального мира значения A и B . В реальном мире умножение этих реальных мировых ценностей таково:
А * В = Р
Если вместо этого они представлены с масштабным коэффициентом Z , и эти масштабированные представления впоследствии умножаются, результат будет следующим:
AZ * BZ = Q
AZ является масштабируется в реальном мире значение A , или просто продукт из A * Z , а также, BZ является масштабируется представление B . После масштабированного умножения ответ не записывается как PZ , потому что значение, сохраненное в PZ , не является ответом. Это можно увидеть, переставив оператор, где каждая следующая строка эквивалентна:
AZ * BZ = QА * Я * Б * Я = Q(А * В) * Z * Z = QP * Z * Z = QPZ * Z = Q
В строке 4, P заменяет A * B . Отсюда следует , что результат AZ * BZ (что Q ) является не PZ , а PZ + Z . Если бы PZ был ответом, его можно было бы сохранить напрямую, поскольку он имеет встроенный масштабный коэффициент, как в случае с сложением и вычитанием . Однако для умножения произведение двух масштабированных значений имеет встроенное дополнительное масштабирование. Пока это принимается во внимание, нет необходимости преобразовывать AZ и BZ в A и B перед выполнением операции; результат необходимо разделить на Z перед сохранением. После этого PZ будет сохранен как результат умножения, который действительно является масштабированным представлением результата A * B (желаемый ответ), а не результата AZ * BZ (который все еще масштабируется).
Общие сценарии масштабирования
Дробные значения, преобразованные в целые числа
Как описано ранее, многие старые процессоры (и, возможно, некоторые современные) не поддерживают дробную математику. В этом случае дробные значения можно преобразовать в целые числа, умножив их на десять в степени любой желаемой десятичной точности. Другими словами, чтобы сохранить n цифр справа от десятичной точки , необходимо умножить все число на 10 n . В компьютерах, которые выполняют вычисления в двоичном формате, действительное число умножается на 2 m, чтобы сохранить m цифр справа от двоичной точки ; в качестве альтернативы можно сдвинуть значение на m раз влево. Например, в следующем наборе дробных значений реального мира все имеют три цифры справа от десятичной точки:
15.400, 0.133, 4.650, 1.000, 8.001
Чтобы сохранить всю эту информацию (другими словами, не потерять точность ), эти числа необходимо умножить на 10 3 (1000), получив целые значения:
15400, 133, 4650, 1000, 8001
Из-за значения масштабированных чисел они не могут быть сохранены в 8-битных целых числах; им потребуется как минимум 14 беззнаковых битов, или, что более реалистично, 16.
Целочисленные значения в дроби
Некоторые процессоры, особенно DSP, распространенные в индустрии встроенных систем , имеют встроенную поддержку арифметики с фиксированной точкой , например форматы Q и IQ .
Поскольку дробная часть числа занимает несколько битов в поле, диапазон значений, возможных в значении fixed9point, меньше, чем такое же количество битов предоставило бы для целого числа. [4] Например, в 8-битном поле целое число без знака может хранить значения из [0, 255], но беззнаковая фиксированная точка с 5 битами, выделенными для дробной части, имеет только 3 бита, оставшихся для целочисленного значения, и поэтому может хранить только целые значения из [0, 7]. (Количество различных значений, которые могут храниться в двух полях, одинаково, 2 8 = 256, потому что поле с фиксированной точкой может также хранить 32 дробных значения для каждого целочисленного значения.) Поэтому часто используется коэффициент масштабирования для хранить реальные значения, которые могут быть больше, чем максимальное значение формата с фиксированной точкой.
Например, при использовании беззнакового 8-битного формата с фиксированной точкой (который имеет 4 целых бита и 4 дробных бита) максимальное представимое целочисленное значение равно 15, а максимальное представимое смешанное значение - 15,9375 (0xF.F или 1111.1111 b ). Если желаемые значения реального мира находятся в диапазоне [0,160], они должны быть масштабированы, чтобы соответствовать этому представлению с фиксированной точкой. Масштабный коэффициент Здесь нельзя использовать 1 ⁄ 10 , потому что масштабирование 160 на 1 ⁄ 10 дает 16, что больше максимального значения, которое может быть сохранено в этом формате с фиксированной точкой. Тем не мение, 1 / 11 будут работатькачестве масштабного коэффициента, так как максимальное значение масштабируется, 160 ⁄ 11 = 14. 54 , попадает в этот диапазон. Учитывая этот набор:
154, 101, 54, 3, 0, 160
Масштабирование с коэффициентом масштабирования +1 / 11 дает следующие значения:
154/11 = 14101/11 = 9,1818 ...54/11 = 4,9090 ...3/11 = 0,2727 ...0/11 = 0160/11 = 14,5454 ...
Многие из этих значений были усечены, потому что они содержат повторяющиеся десятичные дроби , что следует из выбранного масштабного коэффициента (одиннадцатые не оканчиваются десятичными знаками). При сохранении их в нашем формате с фиксированной точкой некоторая точность будет потеряна (в отличие от точных значений исходных целых чисел). Это также проблема, потому что 8-битный формат может хранить 256 различных значений, но числа в этом наборе взяты из диапазона, содержащего только 161 возможное значение (от 0 до 160). Как выясняется, проблема заключалась в масштабном коэффициенте, 1 ⁄ 11 , что вводит ненужные требования к точности и ошибку округления (при приближении реального значения к ближайшему представимому значению). [5] Чтобы избежать или решить эту проблему, нужно выбрать лучший масштабный коэффициент.
Выбор масштабного коэффициента
В приведенном выше примере показано, как определенные масштабные коэффициенты могут вызвать ненужную потерю точности или ошибку округления, подчеркивая важность выбора правильного масштабного коэффициента. Используя масштабный коэффициент 1 ⁄ 11 и при преобразовании в двоичные представления получаются следующие значения:
154/11 = 14 = 1110,0101/11 = 9,1818 ... = 1001,00101110 ...54/11 = 4,9090 ... = 100,111010 ...3/11 = 0,2727 ... = 0,010010 ...0/11 = 0 = 0,0160/11 = 14,5454 ... = 1110,10010 ...
Для некоторых двоичных дробей требуется более четырех дробных битов, предусмотренных установленным форматом с фиксированной точкой. (Частично это связано с тем, что одиннадцатые не заканчиваются двоичным кодом.) Чтобы уместить их в поля (4 целых и 4 дробных бита), можно усечь оставшиеся биты, дав следующие сохраненные представления:
1110.00001001.00100100.11100000.01000000.00001110.1001
Или в десятичном виде:
14.09,1254,8750,250,014,5625
Когда их вызывают обратно в реальный мир, они делятся на коэффициент масштабирования, 1 ⁄ 11 . Это обратное исходное масштабирование, дающее следующие значения "реального мира":
154,0100,37553,6252,750160,1875
Эти значения не эквивалентны исходным (до масштабирования и подгонки под это 8-битное представление). Наиболее заметно, что они больше не являются целыми числами, что сразу указывает на то, что в хранилище была внесена ошибка из-за неправильного выбора коэффициента масштабирования.
Выбор лучшего масштабного коэффициента
Большинство наборов данных не имеют идеального масштабного коэффициента; скорее всего, в процессе масштабирования возникнет какая-то ошибка. Однако, возможно, удастся выбрать лучший масштабный коэффициент. Идеальный масштабный коэффициент может быть не наименьшим, а таким, который сохраняет максимально возможную точность.
Деление числа на степень двойки равносильно сдвигу всех битов вправо один раз для каждой степени двойки. (Это двоичный эквивалент сдвига всех десятичных цифр влево или вправо при умножении или делении на десятичные степени соответственно). Шаблон битов не меняется, он просто перемещает количество разрядов, равное двоичной экспоненте ( например, 3 знака вправо при делении на 8 = 2 3 ). С другой стороны, при делении на число, которое не является целой степенью двойки в двоичном формате, битовая комбинация изменяется. Это, вероятно, приведет к созданию битовой комбинации с большим количеством битов справа от двоичной точки, искусственно вводя требуемую точность. Это особенно верно, когда дробная часть имеет знаменатель, который не является степенью двойки, поскольку все дроби, не являющиеся обратными степеням двойки, повторяются в двоичной системе. [6] Таким образом, почти всегда предпочтительнее использовать масштабный коэффициент, равный степени двойки. По-прежнему возможно потерять биты, которые сдвинуты сразу с конца поля в результате усечения, но это позволяет избежать введения новых битов, которые будут неточными (из-за ошибки округления) или усеченными. [6]
В качестве иллюстрации использование степеней двойки в масштабном коэффициенте, масштабный коэффициент К вышеуказанному набору данных можно применить 1 ⁄ 16 . Бинарные значения для исходного набора данных приведены ниже:
154 = 1001 1010101 = 0110 010154 = 0011 01103 = 0000 00110 = 0000 0000160 = 1010 0000
Будучи целыми числами от 0 до 255, все они могут быть представлены с точностью до 8 бит. Масштабирование их 1 / 16 таких жекак деление на 16, который является таким жекак сдвиг бит 4 места вправо. В этом случае масштабирование выполняется путем вставки двоичной точки между первыми 4 битами и последними 4 битами каждого числа. Это совпадает с заранее определенным форматом этого представления. Следовательно, поскольку все эти числа не требуют более 8 бит для представления их в виде целых чисел, требуется не более 8 бит для их уменьшения и сохранения в формате с фиксированной точкой.
Смотрите также
- Логарифм
- Масштабирование (геометрия)
- Научная нотация
Рекомендации
- Перейти ↑ Linz 2003 , pp. 12–13.
- Перейти ↑ Linz 2003 , pp. 14–15.
- Перейти ↑ Yates 2013 , p. 6.
- Перейти ↑ Yates 2013 , pp. 4–5.
- Перейти ↑ Linz 2013 , p. 18.
- ^ a b «Двоичные дроби» . Floating-point-gui.de . Дата обращения 6 июля 2020 .
- Йетс, Р. (2013). «Арифметика с фиксированной точкой: введение» (PDF) . Лаборатории цифровых сигналов. Архивировано (PDF) из оригинала 12 сентября 2015 года.CS1 maint: ref дублирует значение по умолчанию ( ссылка )
- Linz, P .; Ван, RLC (2003). Изучение численных методов: введение в научные вычисления с использованием MATLAB . Jones and Bartlett Publishers . ISBN 0-7637-1499-2.