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-битовое значение,  яв-
ляющееся дополнением до двух.
                      С наилучшими пожеланиями, Константин Поддубный.  
 |