конспект лекций, вопросы к экзамену

Вещественные числа и их хранение в памяти ПК. Применимость вещественных данных. Предельные константы.

Существуют 2 формы записи чисел: ествественная (Ае) и нормальная (Ан)

При ествественной форме число записывается как десятичное целое число или десятичная дробь. (Например, 156 - целое число, 0,00067 - правильная десятичная дробь, 6,56 - неправильная десятичная дробь) .

Нормальная (экспотенциальная) форма числа в системе с основанием q имеет вид:

Ан=m*qp,

Где m-мантисса, 

p-порядок(характеристика). 

При этом, форма записи одного и того же числа может принимать разный вид. Например, пусть Ае=3456,45. Тогда десятичное Ан может быть записано в следующем виде:

Ан= 0,345645*104= 3,45645*103=345645,0*10-2

Пусть двоичное Ае=110001,1101. Тогда соответствующее двоичное Ан может быть записано в следующем виде: 

Ан=0,1100011101*10110=1,100011101*10101=1100011101,0*10-100

В любой системе счисления умножение мантиссы на степень основания системы сводится к сдвигу запятой мантиссы вправо (при p>0) или влево (при p<0) на соответствующее количество разрядов. Отсюда понятие - "плавающая запятая".

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

q-1<= |m|<1 

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

На этом рисунке знак числа (старший бит первого байта) равен 1, если число меньше нуля и равен 0 в противном случае. Сама мантисса представляется в дополнительном коде. порядок в машинном представлении всегда положителен. Для его размещения отводится всего 8 бит: 7 бит справа у первого байта и один крайний левый бит левого байта мантиссы.

Машинный порядок pм  определяется по формуле

                                             pм = p + L                                                                

где L – смещение, равное 11111112 = 7F16 =12710. Поскольку в одном байте можно представить целые числа в диапазоне от 0 до 255, то фактический порядок p  может принимать значения от –127 (pm = 0) до 128 (pm = 255). В представлении мантиссы в процессорах  Intel есть некоторая хитрость. Поскольку число всегда нормализовано, и старшая цифра равна единице, то эта единица не представляется в памяти, но всегда учитывается процессором и считается размещенной непосредственно перед неявной точкой, а машинный порядок уменьшается на единицу. Рассмотрим пример представления вещественного числа в нормализованной двоичной форме. Пусть дано число 8. В двоичной форме это будет число 10002. В нормализованной нормальной форме это будет число 0,10*10100. Машинный порядок нормализованного числа pм = 12710 + 410 –110 =13010 = 01000 0010. Поскольку первый разряд после запятой не представляется, то значение мантиссы в машинном представлении будет иметь вид mм =  000 0000 0000. Когда соединим знак(0, т. к. число >0), pм и mм то получим: 00100 0001 0000 0000 0000 или в шестнадцатеричном виде
41 00 00 00.

Рассматривая представление вещественных данных в компьютере, можно сделать важные выводы:

  • в компьютере невозможно представить бесконечно малые числа;
  • в компьютере невозможно представить бесконечно большие числа

Таким образом, данное вещественного типа - это число, представленное в компьютере в нормализованной двоичной форме 

Применимость вещественных данных. Предельные константы

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

При использовании нормализованной формы плотность представителей интервалов на оси вещественных чисел экспоненциально уменьшается с увеличением |x|. Например, интервал [0.1: 1] содержит приблизительно столько же представителей, сколько интервал [10000 : 100000]. (Для основания представления 10 это точно столько).

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

  • Тип float является конечным подмножеством множества вещественных чисел
  • Каждому числу x принадлежащему множеству вещественных чисел ставится в соответствие число типа float, которое называется его представителем.
  • Каждое число типа float представляет множество вещественных чисел, но это множество значений является связным интервалом на вещественной числовой оси.
  • Существует максимальное значение max, такое, что для всех |x| > max представители не определены.
  • Существует минимальное значение, такое, что для всех |x| < min представители не определены.
  • Множество чисел типа float симметрично относительно 0. 

    Предельные значения целочисленных данных- файл limits.h                                   

    Имя константы

    Значение

    Смысл

    CHAR_BIT

    8

    Число битов в байте

    SCHAR_MIN

    -128

    Минимальное значение для signed char

    SCHAR_MAX

    127

    Максимальное значение signed char

    UCHAR_MAX

    255

    Максимальное значение unsigned char

    INT_MAX

    32767

    Максимальное значение для int

    UINT_MAX

    65535

    Максимальное значение для unsigned int

    LONG_MIN

    -2147483648

    Минимальное значение для long

    LONG_MAX

    2147483647

    Максимальное значение для long

    ULONG_MAX

    4294967295

    Максимальное значение для unsigned long

    Предельные значения вещественных данных – файл float.h

    Имя константы

    Значение

    Смысл

    FLT_DIG

    6

    Количество верных десятичных цифр для данных типа float

    FLT_EPSILON

    1e-5

    Минимальное x, такое, что 1.0 + x ¹ 1.0 для данных типа float
    (в версии Borland C++ 3.1 х=1.192093e-07)

    FLT_MAX

    1e+37

    Максимальное число с плавающей точкой типа float(в версии Borland 3.1 C++

    3.402823e+38)

    FLT_MIN

    1e-37

    Минимальное нормализованное число с плавающей запятой типа float (в версии Borland 3.1 C++

    1.175494e-38)
     

    DBL_DIG

    10

    Количество верных десятичных цифр для данных типа double)

    DBL _EPSILON

    1e-16

    Минимальное x, такое, что 1.0 + x ¹ 1.0 для данных типа double
    (в версии Borland 3.1 C++ 2.220446e-16)

    DBL_MAX

    1e+308

    Максимальное число с плавающей точкой типа double(в версии Borland 3.1 C++

    1.797693e+308)

    DBL_MIN

    1e-308

    Минимальное нормализованное число с плавающей запятой типа double (в версии Borland 3.1 C++

    2.225074e-308)
     

02.08.2017; 20:00
просмотров: 311