Число с фиксированной запятой
- 1 year ago
- 0
- 0
Число с плавающей запятой (или число с плавающей точкой ) — экспоненциальная форма представления вещественных (действительных) чисел , в которой число хранится в виде мантиссы и порядка ( показателя степени ). При этом число с плавающей запятой имеет фиксированную относительную точность и изменяющуюся абсолютную. Используемое наиболее часто представление утверждено в стандарте IEEE 754 . Реализация математических операций с числами с плавающей запятой в вычислительных системах может быть как аппаратная, так и программная.
Так как в некоторых, преимущественно англоязычных и англофицированных странах при записи чисел целая часть отделяется от дробной точкой, то в терминологии этих стран фигурирует название «плавающая точка» ( англ. floating point ). Так как в России целая часть числа от дробной традиционно отделяется запятой, то для обозначения того же понятия исторически используется термин «плавающая запятая», однако в настоящее время в русскоязычной литературе и технической документации можно встретить оба варианта.
Название «плавающая запятая» происходит от того, что запятая в позиционном представлении числа (десятичная запятая, или, для компьютеров, двоичная запятая) может быть помещена где угодно относительно цифр в строке. Это положение указывается отдельно во внутреннем представлении. Такое представление может рассматриваться как компьютерная реализация экспоненциальной записи чисел.
Преимущество использования представления чисел в формате с плавающей запятой над представлением в формате с фиксированной запятой (и целыми числами ) состоит в том, что можно использовать существенно больший диапазон значений при неизменной относительной точности . Например, в форме с фиксированной запятой число, занимающее 6 разрядов в целой части и 2 разряда после запятой, может быть представлено в виде 123 456,78. В свою очередь, в формате с плавающей запятой в тех же 8 разрядах можно записать числа 1,2345678; 1 234 567,8; 0,000012345678; 12 345 678 000 000 000 и так далее, но для этого необходимо иметь дополнительное двухразрядное поле для записи показателей степени основания 10 от 0 до 16, при этом общее число разрядов составит 8+2=10.
Скорость выполнения компьютером операций с числами, представленными в форме с плавающей запятой, измеряется во FLOPS (от англ. floating-point operations per second — «[количество] операций с плавающей запятой в секунду») и является одной из основных единиц измерения быстродействия вычислительных систем.
Число с плавающей запятой состоит из следующих частей:
Нормальной формой числа с плавающей запятой называется такая форма, в которой мантисса (без учёта знака) находится на полуинтервале , то есть .
Такая форма записи имеет недостаток: некоторые числа записываются неоднозначно (например, 0,0001 можно записать как 0,000001⋅10 2 , 0,00001⋅10 1 , 0,0001⋅10 0 , 0,001⋅10 −1 , 0,01⋅10 −2 и так далее), поэтому распространена (особенно в информатике) также другая форма записи — нормализованная , в которой мантисса десятичного числа принимает значения от 1 (включительно) до 10 (исключительно), то есть (аналогично, мантисса двоичного числа принимает значения от 1 до 2). В такой форме любое число (кроме ) записывается единственным образом. Недостаток заключается в том, что в таком виде невозможно представить 0, поэтому представление чисел в информатике предусматривает специальный признак ( бит ) для числа 0.
Старший разряд (целая часть числа) мантиссы двоичного числа (кроме 0) в нормализованном виде равен 1 (так называемая неявная единица ), поэтому при записи мантиссы числа в ЭВМ старший разряд можно не записывать, что и используется в стандарте IEEE 754 . В позиционных системах счисления с основанием большим, чем 2 (в троичной , четверичной и др.), этого свойства нет.
При ограниченных возможностях оформления (например, отображение числа на семисегментном индикаторе ), а также при необходимости обеспечить быстрый и удобный ввод чисел, вместо записи вида m · b e ( m — мантисса; b — основание , чаще всего 10; e — экспонента), записывают лишь мантиссу и показатель степени, разделяя их буквой «E» (от англ. exponent ). Основание при этом неявно полагают равным 10. Например, число 1,528535047⋅10 −25 в этом случае записывается как 1.528535047E-25.
Существует несколько способов того, как строки из цифр могут представлять числа:
Запись числа в форме с плавающей запятой позволяет производить вычисления над широким диапазоном величин, сочетая фиксированное количество разрядов и точность. Например, в десятичной системе представления чисел с плавающей запятой (3 разряда) операцию умножения, которую мы бы записали как
в нормальной форме представляется в виде
В формате с фиксированной запятой мы бы получили вынужденное округление
Мы потеряли крайний правый разряд числа, так как данный формат не позволяет запятой «плавать» по записи числа.
Диапазон чисел, которые можно записать данным способом, зависит от количества бит, отведённых для представления мантиссы и показателя. На обычной 32-битной вычислительной машине, использующей двойную точность (64 бита), мантисса составляет 1 бит знак + 52 бита, показатель — 1 бит знак + 10 бит. Таким образом получаем диапазон точности примерно от 4,94⋅10 −324 до 1.79⋅10 308 (от 2 −52 × 2 −1022 до ~1 × 2 1024 ). (или от 3.7⋅10 -1126 до 9.99⋅10 1091 ). В стандарте IEEE 754 несколько значений данного типа зарезервировано для обеспечения возможности представления специальных значений. К ним относятся значения NaN (Not a Number, «не число») и +/-INF (Infinity, бесконечность ), получающихся в результате операций деления на ноль или при превышении числового диапазона. Также сюда попадают денормализованные числа , у которых мантисса меньше единицы. В специализированных устройствах (например, GPU ) поддержка специальных чисел часто отсутствует. Существуют программные пакеты, в которых объём памяти, выделенный под мантиссу и показатель, задаётся программно и ограничивается лишь объёмом доступной памяти ЭВМ (см. Арифметика произвольной точности ).
Точность | Одинарная | Двойная | Расширенная |
---|---|---|---|
Размер (байты) | 4 | 8 | 10 |
Число десятичных знаков | ~7.2 | ~15.9 | ~19.2 |
Наименьшее значение (>0), denorm | 1,4⋅10 −45 | 4,9⋅10 −324 | 3,7⋅10 −1126 |
Наименьшее значение (>0), normal | 1,2⋅10 −38 | 2,3⋅10 −308 | 1⋅10 −1091 |
Наибольшее значение | 3,4×10 +38 | 1,7×10 +308 | 9,9×10 +1091 |
Поля | S-E-F | S-E-F | S-E-I-F |
Размеры полей | 1-8-23 | 1-11-52 | 1-15-1-63 |
В отличие от чисел с фиксированной запятой , сетка чисел, которые способна отобразить арифметика с плавающей запятой, неравномерна: она более густая для чисел с малыми порядками и более редкая — для чисел с большими порядками. Но относительная погрешность записи чисел одинакова и для малых чисел, и для больших. Машинным эпсилоном называется наименьшее положительное число ε такое, что (знаком обозначено машинное сложение). Грубо говоря, числа a и b , соотносящиеся так, что , машина не различает.
Для одинарной точности , то есть приблизительно 7 значащих цифр . Для двойной точности: , 15 значащих цифр .