Числа с плавающей точкой (Float)
Числа с плавающей точкой (или числа с плавающей запятой) — это способ представления вещественных чисел в компьютерах, позволяющий хранить числа с дробной частью. В отличие от целых чисел, числа с плавающей точкой могут представлять более широкий диапазон значений за счет использования экспоненциальной записи.
Содержание
Представление чисел с плавающей точкой
Числа с плавающей точкой обычно представляются в формате, стандартизированном стандартом IEEE 754. Этот стандарт определяет несколько форматов, наиболее распространенными из которых являются:
- Одинарная точность (Single-precision): 32 бита.
- Двойная точность (Double-precision): 64 бита.
Формат IEEE 754 состоит из трех основных частей:
- Знак (Sign): 1 бит. Определяет знак числа (0 — положительное, 1 — отрицательное).
- Экспонента (Exponent): Несколько бит (8 бит для одинарной точности, 11 бит для двойной точности). Представляет порядок числа.
- Мантисса (Mantissa) или значащие цифры (Significand): Несколько бит (23 бита для одинарной точности, 52 бита для двойной точности). Представляет значащие цифры числа.
Формула для вычисления значения числа с плавающей точкой: $$ (-1)^{sign} \times significand \times 2^{exponent - bias} $$
Где:
- `sign` — бит знака.
- `significand` — мантисса (нормализованное значение).
- `exponent` — значение экспоненты.
- `bias` — смещение (bias), используемое для представления экспоненты как положительного числа.
Нормализация
Для увеличения точности числа с плавающей точкой нормализуются. Это означает, что мантисса представляется в виде числа между 1 (включительно) и 2 (исключительно). Например, число 0.5 представляется как $1.0 \times 2^{-1}$.
Смещение (Bias)
Экспонента представляется со смещением, чтобы избежать необходимости хранения знака экспоненты. Смещение вычисляется по формуле: $$ bias = 2^{k-1} - 1 $$
Где `k` — количество битов, используемых для представления экспоненты.
Для одинарной точности: $bias = 2^{8-1} - 1 = 127$ Для двойной точности: $bias = 2^{11-1} - 1 = 1023$
Особые значения
Стандарт IEEE 754 определяет несколько особых значений:
- Ноль (Zero): Представляется как все биты равные нулю.
- Бесконечность (Infinity): Представляется как максимальное значение экспоненты и нулевая мантисса. Используется для представления результатов, которые слишком велики для представления в виде числа с плавающей точкой.
- Не число (NaN - Not a Number): Представляется как максимальное значение экспоненты и ненулевая мантисса. Используется для представления результатов, которые не являются числами (например, деление нуля на ноль).
Примеры
- Пример представления числа 5.0 в формате одинарной точности (32 бита):
- Знак: 0 (положительное число)
- Экспонента: 129 (10000001 в двоичной системе)
- Мантисса: 1.25 (10100000000000000000000 в двоичной системе)
- Полное представление: 0 10000001 10100000000000000000000
- Пример представления числа -0.75 в формате одинарной точности (32 бита):
- Знак: 1 (отрицательное число)
- Экспонента: 126 (01111110 в двоичной системе)
- Мантисса: 1.5 (11000000000000000000000 в двоичной системе)
- Полное представление: 1 01111110 11000000000000000000000
Проблемы чисел с плавающей точкой
- Ограниченная точность: Числа с плавающей точкой имеют ограниченную точность, что может приводить к ошибкам округления.
- Невозможность точного представления некоторых чисел: Некоторые десятичные числа (например, 0.1) не могут быть точно представлены в двоичной системе счисления, что приводит к небольшим ошибкам при выполнении арифметических операций.
- Сравнение чисел с плавающей точкой: Из-за ошибок округления прямое сравнение чисел с плавающей точкой на равенство может быть ненадежным. Вместо этого рекомендуется сравнивать числа с определенной погрешностью (эпсилон).
Практические рекомендации
- Используйте числа с плавающей точкой двойной точности (double), если требуется высокая точность.
- Избегайте прямого сравнения чисел с плавающей точкой на равенство. Вместо этого сравнивайте их с определенной погрешностью.
- Помните об ошибках округления, особенно при выполнении большого количества арифметических операций.
- Используйте специализированные библиотеки, если требуется высокая точность или работа с большими числами.
Применение
Числа с плавающей точкой используются в широком спектре приложений, включая:
- Научные вычисления.
- Инженерные расчеты.
- Компьютерная графика.
- Финансовые вычисления.
- Игры.
Понимание чисел с плавающей точкой и их ограничений является важным для разработки надежного и точного программного обеспечения.