Информационный сервер для программистов: Исходники со всего света. Паскальные исходники со всего света
  Powered by Поисковый сервер Яndex: Найдется ВСЁ!
На Главную Pascal Форум Информер Страны мира
   Типы Данных    >>    floatype
   
 
 Формат чисел с плавающей точкой  Константин Поддубный 03.12.1994

Описание формата чисел с плавающей точкой: Real, Single, Double, Extended и Comp.



1k 
 

From: Constantin Poddubny <const@const.krasnoyarsk.su> Organization: The Sosnovoborsk Municipal Venture for Housing and > Как в Паскале представляются типы real,double и проч. вещественные? > Где порядок, а где мантисса если обращаться напрямую к этим > переменным в ассемблерных вставках? Вообще-то вещественные типы, приведенные ниже, являются стандартом IEEE (кроме типа Real), так что с ними можно работать не только в Паскале, но и в любом другом языке, поддерживающим этот стандарт. Привожу отрывок из документации по TP 6.0, BP 7.0 для тех, кто ее не читает: Типы с плавающей точкой Типы значений с плавающей точкой Real, Single, Double, Extended и Comp (вещественный, с одинарной точностью, с двойной точностью, с повышенной точностью и сложный) хранятся в виде дво- ичного представления знака (+ или -), показателя степени и знача- щей части числа. Представляемое число имеет значение: +/- значащая_часть Х 2^показатель_степени где значащая часть числа представляет собой отдельный бит слева от двоичной десятичной точки (то есть 0 <= значащая часть <= 2). В следующей далее схеме слева расположены старшие значащие биты, а справа - младшие значащие биты. Самое левое значение хра- нится в самых старших адресах. Например, для значения веществен- ного типа e сохраняется в первом байте, f - в следующих пяти бай- тах, а s - в старшем значащем бите последнего байта. Вещественный тип Шестибайтовое (48-битовое) вещественное число (Real) подраз- деляется на три поля: 1 39 8 +---+------..-------+--------+ | s | f | e | +---+------..-------+--------+ msb lsb msb lsb Значение v числа определяется с помощью выражений: if 0 < e <= 255, then v = (-1)^s * 2^(e-129)*(l.f). if e = 0, then v = 0. Вещественный тип не может использоваться для хранения ненор- мализованных чисел, значений, не являющихся числом (NaN), а также бесконечно малых и бесконечно больших значений. Ненормализованное число при сохранении его в виде вещественного принимает нулевое значение, а не числа, бесконечно малые и бесконечно большие зна- чения при попытке использовать для их записи формат вещественного числа приводят к ошибке переполнения. Здесь и далее msb означает более значащий бит (старшие раз- ряды), lsb - менее значащий (младшие разряды). Тип числа с одинарной точностью Четырехбайтовое (32-битовое) число типа Single подразделяет- ся на три поля: 1 8 23 +---+------+-------..---------+ | s | e | f | +---+------+-------..---------+ msb lsb msb lsb Значение v этого числа определяется с помощью выражений: if 0 < e < 255, then v = (-1)^s * 2^(e-12) * (l.f). if e = 0 and f <> 0, then v = (-1)^s * 2^(126) * (o.f). if e = 0 and f = 0, then v = (-1)^s * O. if e = 255 and f = 0, then v = (-1)^s * Inf. if e = 255 and f <> 0, then v = NaN. Тип числа с двойной точностью Восьмибайтовое (64-битовое) число типа Double подразделяется на три поля: 1 11 52 +---+------+-------..--------+ | s | e | f | +---+------+-------..--------+ msb lsb msb lsb Значение v этого числа определяется с помощью выражений: if 0 < e < 2047, then v = (-1)^s * 2^(e-1023) * (l.f). if e = 0 and f <> 0, then v = (-1)^s * 2^(1022) * (o.f). if e = 0 and f = 0, then v = (-1)^s * O. if e = 2047 and f = 0, then v = (-1)^s * Inf. if e = 2047 and f <> 0, then v = NaN. Тип числа с повышенной точностью Десятибайтовое (80-битовое) число типа Extended подразделя- ется на четыре поля: 1 15 1 63 +---+--------+---+--------..-------+ | s | e | i | f | +---+--------+---+--------..-------+ msb lsb msb lsb Значение v этого числа определяется с помощью выражений: if 0 < e < 32767, then v = (-1)^s * 2^(e-1023) * (l.f). if e = 32767 and f = 0, then v = (-1)^s * Inf. if e = 32767 and f <> 0, then v = NaN. Сложный тип Восьмибайтовое (64-битовое) число сложного типа (Comp) под- разделяется на два поля: 1 63 +---+-----------..--------------+ | s | d | +---+-----------..--------------+ msb lsb Значение v этого числа определяется с помощью выражений: if s = 1 and d = 0, then v = NaN. в противном случае v представляет собой 64-битовое значение, яв- ляющееся дополнением до двух. С наилучшими пожеланиями, Константин Поддубный.