Значение числа 754

Работа с числами в языке Java | Лекция | НОУ ИНТУИТ

Значение числа 754

Целое число можно представить в виде

Аналогично можно записать двоичную дробь:

Заметим, что сдвиг двоичной точки на n разрядов вправо (чаще говорят о сдвиге самого числа влево) эквивалентен умножению числа на . Сдвиг точки влево (то есть сдвиг самого числа вправо) – делению на .

Рассмотрим сначала упрощенную схему хранения чисел в формате с плавающей точкой (floating point), несколько отличающуюся от реальной.

Число с плавающей точкой может быть представлено в виде . Множитель s – знак числа. Второй множитель m называется мантиссой, а число – порядком числа.

Для простоты рассмотрим 10-битовую ячейку, состоящую из трех независимых частей:

Рис. 4.1.

Первым идет знаковый бит. Если он равен 0, число положительно, если равен 1 – отрицательно. Набор бит, хранящийся в мантиссе, задает положительное число m, лежащее в пределах .

Оно получается из нашего двоичного числа путем переноса двоичной точки на место после первой значащей цифры числа. Например, числа , и и имеют одну и ту же мантиссу, равную .

При этом следующая за ведущей единицей точка в ячейке, выделяемой под мантиссу, не хранится — она подразумевается. То есть мантиссы приведенных чисел будут храниться в виде .

Число сдвигов двоичной точки (с учетом знака) хранится в части ячейки, выделяемой под порядок числа. В нашем примере числа , и будут иметь порядки 0, 1 и -1, соответственно. При перемножении чисел их мантиссы перемножаются, а порядки складываются. При делении – мантиссы делятся, а порядки вычитаются.

И умножение, и деление мантисс происходит по тем же алгоритмам, что и для целых чисел. Но при выходе за размеры ячейки отбрасываются не старшие, а младшие биты. В результате каждая операция умножения или деления дает результат, отличающийся от точного на несколько значений младшего бита мантиссы.

Аналогичная ситуация с потерей младших бит возникает при умножениях и делениях.

Ведь если в ячейках для чисел данного типа хранится значащих цифр числа, то при умножении двух чисел точный результат будет иметь значащих цифр, последние из которых при записи результата в ячейку будут отброшены даже в том случае, если они сохранялись при вычислениях.

А при делении в общем случае при точных вычислениях должна получаться бесконечная периодическая двоичная дробь, так что даже теоретически невозможно провести эти вычисления без округлений. С этим связана конечная точность вычислений на компьютерах при использовании формата с «плавающей точкой». При этом чем больше двоичных разрядов выделяется под мантиссу числа, тем меньше погрешность в такого рода операциях.

Замечание: системы символьных вычислений (или, что то же, – аналитических вычислений, или, что то же, системы компьютерной алгебры) позволяют проводить точные численные расчеты с получением результатов в виде формул.

Однако они выполняют вычисления на много порядков медленнее, требуют намного больше ресурсов и не могут работать без громоздкой среды разработки.

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

При сложении или вычитании сначала происходит приведение чисел к одному порядку: мантисса числа с меньшим порядком делится на , а порядок увеличивается на , где – разница в порядке чисел.

При этом деление на осуществляется путем сдвига мантиссы на бит вправо, с заполнением освобождающихся слева бит нулями.

Младшие биты мантиссы, выходящие за пределы отведенной под нее части ячейки, теряются.

Пример:

сложим числа и Для первого числа мантисса , порядок 1, так как . Для второго – мантисса порядок -1, так как . Приводим порядок второго числа к значению 1, сдвигая мантиссу на 2 места вправо, так как разница порядков равна 2:

Но при таком сдвиге теряется два последних значащих бита мантиссы (напомним, хранится 5 бит), поэтому получаем приближенное значение . Из-за чего в машинной арифметике получается

вместо точного значения .

Таким образом, числа в описанном формате являются на деле рациональными, а не вещественными. При этом операции сложения, вычитания, умножения и деления выполняются с погрешностями, тем меньшими, чем больше разрядность мантиссы. Число двоичных разрядов, отводимых под порядок числа, влияет лишь на допустимый диапазон значений чисел, и не влияет на точность вычислений.

Научная нотация записи вещественных чисел

При записи программы в текстовом файле или выдачи результатов в виде «плоского текста» (plain text) невозможна запись выражений типа . В этом случае используется так называемая научная нотация, когда вместо основания 10 пишется латинская буква E (сокращение от Exponent – экспонента). Таким образом, запишется как 1.5E14, а как 0.31E-7.

Первоначально буква E писалась заглавной, что не вызывало проблем. Однако с появлением возможности набора текста программы в нижнем регистре стали использовать строчную букву e, которая в математике используется для обозначения основания натуральных логарифмов. Запись вида легко воспринять как , а не .

Поэтому лучше использовать заглавную букву.

Литерные константы для вещественных типов по умолчанию имеют тип double. Например, 1.5 , -17E2 , 0.0 . Если требуется ввести литерную константу типа float, после записи числа добавляют постфикс f (сокращение от «float»): 1.5f , -17E2f , 0.0f .

Минимальное по модулю не равное нулю и максимальное значение типа float можно получить с помощью констант

  • Float.MIN_VALUE — равна
  • Float.MAX_VALUE — равна

Аналогичные значения для типа double — с помощью констант

  • Double.MIN_VALUE — равна
  • Double.MAX_VALUE — равна .

*Этот параграф является необязательным и приводится в справочных целях

В каком виде на самом деле хранятся числа в формате с плавающей точкой? Ответ дает стандарт IEEE 754 (другой вариант названия IEC 60559:1989), разработанный для электронных счетных устройств.

В этом стандарте предусмотрены три типа чисел в формате с плавающей точкой, с которыми могут работать процессоры: real*4, real*8 и real*10. Эти числа занимают 4, 8 и 10 байт, соответственно. В Java типу real*4 соответствует float, а типу real*8 соответствует double.

Тип real*10 из распространенных языков программирования используется только в диалектах языка PASCAL, в Java он не применяется.

Число представляется в виде произведения знака , мантиссы и экспоненты :

Число называется порядком. Оно может меняться для разных чисел. Значение , называемое сдвигом порядка, постоянное для всех чисел заданного типа. Оно примерно равно половине максимального числа , которое можно закодировать битами порядка. Точнее, .

  • Для чисел real*4: , d= 127.
  • Для чисел real*8: , d= 1023.
  • Для чисел real*10: , d=16383.

Число называется нормализованным в случае, когда мантисса лежит в пределах . В этом случае первый бит числа всегда равен единице. Максимальное значение мантиссы достигается в случае, когда все ее биты равны 1. Оно меньше 2 на единицу младшего разряда мантиссы, то есть с практически важной точностью может считаться равным 2.

Согласно стандарту IEEE 754 все числа формата с плавающей точкой при значениях порядка в диапазоне от 1 до хранятся в нормализованном виде. Такое представление чисел будем называть базовым.

Когда порядок равен 0, применяется несколько другой формат хранения чисел. Будем называть его особым. Порядок резервируется для кодировки нечисловых значений, соответствующее представление будем называть нечисловым.

Об особом и нечисловом представлениях чисел будет сказано чуть позже.

Размещение чисел в ячейках памяти такое:

Таблица 4.11.

ТипБайт1Байт2Байт3Байт4 … Байт8Байт9Байт10
real*4 sppp pppp pmmm mmmm mmmm mmmm mmmm mmmm
real*8 sppp pppp pppp mmmm mmmm mmmm mmmm mmmm mmmm mmmm
real*10 sppp pppp pppp pppp 1mmm mmmm mmmm mmmm mmmm mmmm mmmm mmmm mmmm mmmm

Буква s обозначает знаковый бит; p – биты двоичного представления порядка, m – биты двоичного представления мантиссы. Если знаковый бит равен нулю, число положительное, если равен единице – отрицательное.

В числах real*4 ( float ) и real*8 ( double ) при базовом представлении ведущая единица мантиссы подразумевается, но не хранится, поэтому реально можно считать, что у них под мантиссу отведено не 23 и 52 бита, которые реально хранятся, а 24 и 53 бита.

В числах real*10 ведущая единица мантиссы реально хранятся, и мантисса занимает 64 бит. Под порядок в числах real*4 отведено 8 бит, в числах real*8 отведено 11 бит, а в числах real*10 отведено 15 бит.

Таблица 4.12.

Тип IEEE 754Тип JavaЧисло бит мантиссыЧисло бит порядкаСдвиг порядка
real*4 float 23+ подразумевается 1 ведущий бит 8 127
real*8 double 52+ подразумевается 1 ведущий бит 11 1023
real*10 64 15 16383

Чему равны минимальное и максимальное по модулю числа при их базовом представлении?

Минимальное значение достигается при минимальном порядке и всех нулевых битах мантиссы (за исключением ведущего), то есть при m=1 и p=1. Значит, минимальное значение равно .

Максимальное значение достигается при максимальном порядке и всех единичных битах мантиссы, то есть при и . Значит, максимальное значение примерно равно

При значениях порядка в диапазоне от 1 до базовое представление позволяет закодировать

  • числа real*4 примерно от 2.350989E-38 до 3.402824E38,

Источник: https://www.intuit.ru/studies/courses/569/425/lecture/9671?page=5

Что нужно знать про арифметику с плавающей запятой

Что нужно знать про арифметику с плавающей запятой

В далекие времена, для IT-индустрии это 70-е годы прошлого века, ученые-математики (так раньше назывались программисты) сражались как Дон-Кихоты в неравном бою с компьютерами, которые тогда были размером с маленькие ветряные мельницы.

Задачи ставились серьезные: поиск вражеских подлодок в океане по снимкам с орбиты, расчет баллистики ракет дальнего действия, и прочее. Для их решения компьютер должен оперировать действительными числами, которых, как известно, континуум, тогда как память конечна. Поэтому приходится отображать этот континуум на конечное множество нулей и единиц.

В поисках компромисса между скоростью, размером и точностью представления ученые предложили числа с плавающей запятой (или плавающей точкой, если по-буржуйски). Арифметика с плавающей запятой почему-то считается экзотической областью компьютерных наук, учитывая, что соответствующие типы данных присутствуют в каждом языке программирования.

Я сам, если честно, никогда не придавал особого значения компьютерной арифметике, пока решая одну и ту же задачу на CPU и GPU получил разный результат.

Оказалось, что в потайных углах этой области скрываются очень любопытные и странные явления: некоммутативность и неассоциативность арифметических операций, ноль со знаком, разность неравных чисел дает ноль, и прочее. Корни этого айсберга уходят глубоко в математику, а я под катом постараюсь обрисовать лишь то, что лежит на поверхности.

1. Основы

Множество целых чисел бесконечно, но мы всегда можем подобрать такое число бит, чтобы представить любое целое число, возникающее при решении конкретной задачи. Множество действительных чисел не только бесконечно, но еще и непрерывно, поэтому, сколько бы мы не взяли бит, мы неизбежно столкнемся с числами, которые не имеют точного представления.

Числа с плавающей запятой — один из возможных способов предсталения действительных чисел, который является компромиссом между точностью и диапазоном принимаемых значений.

Число с плавающей запятой состоит из набора отдельных разрядов, условно разделенных на знак, экспоненту порядок и мантиссу.

Порядок и мантисса — целые числа, которые вместе со знаком дают представление числа с плавающей запятой в следующем виде:

Математически это записывается так:

(-1)s × M × BE, где s — знак, B-основание, E — порядок, а M — мантисса.

Основание определяет систему счисления разрядов. Математически доказано, что числа с плавающей запятой с базой B=2 (двоичное представление) наиболее устойчивы к ошибкам округления, поэтому на практике встречаются только базы 2 и, реже, 10. Для дальнейшего изложения будем всегда полагать B=2, и формула числа с плавающей запятой будет иметь вид:

(-1)s × M × 2E

Что такое мантисса и порядок? Мантисса – это целое число фиксированной длины, которое представляет старшие разряды действительного числа. Допустим наша мантисса состоит из трех бит (|M|=3). Возьмем, например, число «5», которое в двоичной системе будет равно 1012.

Старший бит соответствует 22=4, средний (который у нас равен нулю) 21=2, а младший 20=1. Порядок – это степень базы (двойки) старшего разряда. В нашем случае E=2. Такие числа удобно записывать в так называемом «научном» стандартном виде, например «1.01e+2».

Сразу видно, что мантисса состоит из трех знаков, а порядок равен двум.

Допустим мы хотим получить дробное число, используя те же 3 бита мантиссы. Мы можем это сделать, если возьмем, скажем, E=1. Тогда наше число будет равно

1,01e+1 = 1×21+0×20+1×2-1=2+0,5=2,5

Здесь, поскольку E=1, степень двойки первого разряда (который идет перед запятой), равна «1». Два других разряда, расположенных правее (после запятой), обеспечивают вклад 2E-1 и 2E-2 (20 и 2-1 соответственно). Очевидно, что регулируя E одно и то же число можно представить по-разному. Рассмотрим пример с длиной мантиссы |M|=4. Число «2» можно представить в следующем виде:

2 = 10 (в двоичной системе) = 1.000e+1 = 0.100e+2 = 0.010e+3. (E=1, E=2, E=3 соответственно)

Обратите внимание, что одно и то же число имеет несколько представлений. Это не удобно для оборудования, т.к. нужно учитывать множественность представлния при сравнении чисел и при выполнении над ними арифметических операций.

Кроме того, это не экономично, поскольку число представлений — конечное, а повторения уменьшают множество чисел, которые вообще могут быть представлены. Поэтому уже в самых первых машинах начали использовать трюк, делая первый бит мантиссы всегда положительным.

Такое предаставление назвали нормализованным.

Это экономит один бит, так как неявную единицу не нужно хранить в памяти, и обеспечивает уникальность представления числа. В нашем примере «2» имеет единственное нормализованное представление («1.000e+1»), а мантисса хранится в памяти как «000», т.к. старшая единица подразумевается неявно. Но в нормализованном представлении чисел возникает новая проблема — в такой форме невозможно представить ноль. Строго говоря, нормализованное число имеет следующий вид:

(-1)s × 1.M × 2E.

Качество решения задач во многом зависит от выбора представления чисел с плавающей запятой. Мы плавно подошли к проблеме стандартизации такого представления.

2. Немного истории

В 60-е и 70-е годы не было единого стандарта представления чисел с плавающей запятой, способов округления, арифметических операций. В результате программы были крайне не портабельны. Но еще большей проблемой было то, что у разных компьютеров были свои «странности» и их нужно было знать и учитывать в программе.

Например, разница двух не равных чисел возвращала ноль. В результате выражения «X=Y» и «X-Y=0» вступали в противоречие. Умельцы обходили эту проблему очень хитрыми трюками, например, делали присваивание «X=(X-X)+X» перед операциями умножения и деления, чтобы избежать проблем.

Инициатива создать единый стандарт для представления чисел с плавающей запятой подозрительно совпала с попытками в 1976 году компанией Intel разработать «лучшую» арифметику для новых сопроцессоров к 8086 и i432. За разработку взялись ученые киты в этой области, проф. Джон Палмер и Уильям Кэхэн.

Последний в своем интервью высказал мнение, что серьезность, с которой Intel разрабатывала свою арифметику, заставила другие компании объединиться и начать процесс стандартизации. Все были настроены серьезно, ведь очень выгодно продвинуть свою архитектуру и сделать ее стандартной. Свои предложения представили компании DEC, National Superconductor, Zilog, Motorola.

Производители мейнфреймов Cray и IBM наблюдали со стороны. Компания Intel, разумеется, тоже представила свою новую арифметику. Авторами предложенной спецификации стали Уильям Кэхэн, Джероми Кунен и Гарольд Стоун и их предложение сразу прозвали «K-C-S». Практически сразу же были отброшены все предложения, кроме двух: VAX от DEC и «K-C-S» от Intel.

Спецификация VAX была значительно проще, уже была реализована в компьютерах PDP-11, и было понятно, как на ней получить максимальную производительность. С другой стороны в «K-C-S» содержалось много полезной функциональности, такой как «специальные» и «денормализованные» числа (подробности ниже).

В «K-C-S» все арифметические алгоритмы заданы строго и требуется, чтобы в реализации результат с ними совпадал. Это позволяет выводить строгие выкладки в рамках этой спецификации. Если раньше математик решал задачу численными методами и доказывал свойства решения, не было никакой гарантии, что эти свойства сохранятся в программе.

Строгость арифметики «K-C-S» сделала возможным доказательство теорем, опираясь на арифметику с плавающей запятой. Компания DEC сделала все, чтобы ее спецификацию сделали стандартом. Она даже заручилась поддержкой некоторых авторитетных ученых в том, что арифметика «K-C-S» в принципе не может достигнуть такой же производительности, как у DEC.

Ирония в том, что Intel знала, как сделать свою спецификацию такой же производительной, но эти хитрости были коммерческой тайной. Если бы Intel не уступила и не открыла часть секретов, она бы не смогла сдержать натиск DEC.

Подробнее о баталиях при стандартизации смотрите в интервью профессора Кэхэна, а мы рассмотрим, как выглядит представление чисел с плавающей запятой сейчас.

3. Представление чисел с плавающей запятой сегодня

Разработчики «K-C-S» победили и теперь их детище воплотилось в стандарт IEEE754. Числа с плавающей запятой в нем представлены в виде знака (s), мантиссы (M) и порядка (E) следующим образом:

(-1)s × 1.M × 2E

Замечание. В новом стандарте IEE754-2008 кроме чисел с основанием 2 присутствуют числа с основанием 10, так называемые десятичные (decimal) числа с плавающей запятой.

Чтобы не загромождать читателя чрезмерной информацией, которую можно найти в Википедии, рассмотрим только один тип данных, с одинарной точностью (float).

Числа с половинной, двойной и расширенной точностью обладают теми же особенностями, но имеют другой диапазон порядка и мантиссы. В числах одинарной точности (float/single) порядок состоит из 8 бит, а мантисса – из 23.

Эффективный порядок определяется как E-127. Например, число 0,15625 будет записано в памяти как

Рисунок взят из Википедии В этом примере:

  • Знак s=0 (положительное число)
  • Порядок E=011111002-12710 = -3
  • Мантисса M = 1.012 (первая единица не явная)
  • В результате наше число F = 1.012e-3 = 2-3+2-5 = 0,125 + 0,03125 = 0,15625

Чуть более подробное объяснениеЗдесь мы имеем дело с двоичным представлением числа «101» со сдвигом запятой на несколько разрядов влево. 1,01 — это двоичное представление, означающее 1×20 + 0×2-1 + 1×2-2. Сдвинув запятую на три позиции влево получим 1,01e-3 = 1×2-3 + 0×2-4 + 1×2-5 = 1×0,125 + 0×0,0625 + 1×0,03125 = 0,125 + 0,03125 = 0,15625.

3.1 Специальные числа: ноль, бесконечность и неопределенность

В IEEE754 число «0» представляется значением с порядком, равным E=Emin-1 (для single это -127) и нулевой мантиссой. Введение нуля как самостоятельного числа (т.к. в нормализованном представлении нельзя представить ноль) позволило избежать многих странностей в арифметике. И хоть операции с нулем нужно обрабатывать отдельно, обычно они выполняются быстрее, чем с обычными числами.

Также в IEEE754 предусмотрено представление для специальных чисел, работа с которыми вызывает исключение. К таким числам относится бесконечность (±∞) и неопределенность (NaN). Эти числа позволяет вернуть адекватное значение при переполнении. Бесконечности представлены как числа с порядком E=Emax+1 и нулевой мантиссой.

Получить бесконечность можно при переполнении и при делении ненулевого числа на ноль. Бесконечность при делении разработчики определили исходя из существования пределов, когда делимое и делитель стремиться к какому-то числу. Соответственно, c/0==±∞ (например, 3/0=+∞, а -3/0=-∞), так как если делимое стремиться к константе, а делитель к нулю, предел равен бесконечности.

При 0/0 предел не существует, поэтому результатом будет неопределенность.

Неопределенность или NaN (от not a number) – это представление, придуманное для того, чтобы арифметическая операция могла всегда вернуть какое-то не бессмысленное значение.

В IEEE754 NaN представлен как число, в котором E=Emax+1, а мантисса не нулевая. Любая операция с NaN возвращает NaN. При желании в мантиссу можно записывать информацию, которую программа сможет интерпретировать.

Стандартом это не оговорено и мантисса чаще всего игнорируется.

Как можно получить NaN? Одним из следующих способов:

  • ∞+(- ∞)
  • 0 × ∞
  • 0/0, ∞/∞
  • sqrt(x), где x

Источник: https://habrahabr.ru/post/112953/

Стандарт IEEE 754

Как известно, существует несколько возможных способов представления в машинной памяти множества вещественных чисел. Более того, вплоть до середины 80-х годов существовало не менее нескольких десятков коммерчески значимых архитектур, каждая из которых имела свою реализацию этих способов.

И хотя зачастую эти реализации отличались друг от друга лишь параметрами представления чисел, этот факт превращал процесс разработки стандартных программ для вычислений в сущий кошмар для программистов.

Такая ситуация сподвигла разработчиков аппаратного обеспечения на выработку единого стандарта на представление вещественных чисел, окончательно принятого в 1985 году и ныне известного как стандарт IEEE-754.

Стандарт был разработан со следующими целями:

  1. Упростить перенос существующего программного обеспечения на новые платформы, соответствующие данному стандарту.
  2. Предоставить новые возможности, полезные и безопасные, для программистов, которые, не будучи экспертами в численном анализе, могут писать черезвычайно запутанные программы. Впрочем, иногда полезность и безопасность представляются противоречащими друг другу.
  3. Предоставить возможность экспертам писать и распространять устойчивые и эффективные вычислительные программы, которые были бы хорошо переносимыми между машинами, соответствующими данному стандарту. Кроме того, программы, написанные в соответствии со стандартом, должны возвращать идентичные результаты на всех машинах.
  4. Предоставить прямую поддержку диагностики времени исполнения, обработки исключительных ситуаций и интервальной арифметики.
  5. Предоставить возможности для разработки стандартных элементарных функций, высокоточной арифметики и символьных вычислений.

Для этого были определены:

  1. Базовые и расширенные форматы чисел с плавающей точкой
  2. Операции сложения, вычитания, умножения, деления, квадратного корня, остатка и сравнения
  3. Преобразования между целочисленными и плавающими форматами
  4. Преобразования между различными плавающими форматами
  5. Преобразования между базовыми форматами чисел с плавающей точкой и десятичными строками
  6. Исключительные ситуации, возникающие при вычислениях с плавающей точкой, и их обработка, включая вычисления с не-числами

За рамками стандарта остались форматы десятичных строк и чисел, интерпретация знака и мантиссы не-чисел, и преобразования между двоичным и десятичным представлением чисел в расширенных форматах.

Основные определения стандарта IEEE-754

Смещенный порядок (biased exponent) – сумма порядка и константы (смещения), выбранной так, что сумма неотрицательна. Двоичное число с плавающей точкой (binary floating point number) – битовая строка, характеризующаяся тремя составляющими: знаком (sign), знаковым порядком (signed exponent) и мантиссой (significand).

Ее численное значение (если оно существует) равно произведению знака, мантиссы и двойки, возведенной в степень, равную порядку.

Денормализованное число (denormalized number) – ненулевое число с плавающей точкой, порядок которого имеет некоторое зарезервированное значение (обычно это минимальное представимое в данном формате число), и чей ведущий (явный или неявный бит) нулевой. Место назначения (destination) – то, куда записывается результат бинарной или унарной операции.

Может быть явно назначено пользователем или неявно – системой (к примеру, промежуточные результаты вычисления выражений). Некоторые языки не позволяют пользователям распоряжаться промежуточными результатами. Тем не менее, стандарт описывает результат операции в терминах целевого формата (destination’s format) и значений операндов.

Порядок (exponent) – одна из трех составляющих двоичного числа с плавающей точкой, обычно означающая степень двойки при вычислении значения числа. Иногда порядок называется знаковым (signed) или несмещенным (unbiased). Дробная часть (fraction) – часть мантиссы, лежащая справа от двоичной точки. Не-число (NaN) — символическое значение, кодируемое в плавающем формате.

Существует два типа не-чисел. Сигнализирующие не-числа (signaling NaN) генерируют возникновение исключительной ситуации INVALID в случае, когда они встречаются в качестве операндов. «Тихие» не-числа (quiet NaN) могут без всяких исключений существовать на протяжении почти всех вычислительных операций.

Результат (result) – битовая строка (обычно представляющая некоторое число), возвращаемая в место назначения. Мантисса (significand) – компонента двоичного числа с плавающей точкой, состоящая из явного или неявного ведущего бита слева от подразумеваемой двоичной точки и дробной части справа.

Флаг статуса (status flag) – переменная, которая может принимать два значения. Флаг может быть установленным (set), или неустановленным (clear). Пользователь может очистить флаг, копировать его, или восстановить предыдущее состояние.

Будучи установленным, флаг может содержать дополнительную информацию, зависящую от платформы, и, возможно, недоступную некоторым пользователям. Операции, определенные стандартом, могут иметь побочным эффектом выставление следующих флагов: неточный результат (inexact result), исчезновение порядка (underflow), перполнение (overflow), деление на ноль (divide by zero) и неверная операция (invalid operation).

Пользователь (user) – человек, аппаратура или программа, чьи действия не определяются стандартом, имеющий доступ к программному окружению и контролирующий выполнение операций, определяемых стандартом.

Стандарт IEEE-754 на вычисления с плавающей точкой определяет четыре плавающих формата, которые делятся на базовые и расширенные. Уровень соответствия может различаться в зависимости от того, какие форматы реализованы.

Численные значения величин определяются с использованием трех целых параметров:

  1. p — число значащих битов (precision)
  2. e_max — максимальное значение порядка
  3. e_min — минимальное значение порядка

Параметры базовых форматов приведены в таблице:

Формат p e_max e_min Смещение Порядок (бит) Формат (бит)
Single 24 127 -126 127 8 32
Double 53 1023 -1022 1023 11 64

Полезные ссылки

Источник: http://floatingpoint.ru/ieee754.html

Поделиться:
Нет комментариев

Добавить комментарий

Ваш e-mail не будет опубликован. Все поля обязательны для заполнения.

×
Рекомендуем посмотреть