Существуют 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)