Числа с плавающей точкой (ЧПТ) - стандартный способ представления действительных чисел в компьютерах, аппроксимирующий их в форме: ±m * b^e, где:
Стандарт IEEE 754 определяет форматы (single precision float: 32 бита, double precision double: 64 бита), распределяя биты на знак, экспоненту и мантиссу. Ключевые особенности и проблемы:
Конечная точность и погрешность представления: Большинство действительных чисел не могут быть представлены точно из-за ограниченного числа бит мантиссы. Возникает погрешность округления. Величина машинного эпсилон (ε_mach) - это разница между 1.0 и следующим представимым числом >1.0 - характеризует относительную точность округления (ε_mach ≈ 1.1e^(-16) для double).
Диапазон представимых чисел: Ограничен количеством бит экспоненты. Возможны переполнение (overflow, |число| > max_представимое) и исчезновение порядка (underflow, |число| < min_представимое > 0).
Арифметические операции: Результат операции над ЧПТ часто требует округления до ближайшего представимого числа, внося погрешность.
Потеря значимости (Catastrophic Cancellation): Наиболее опасный эффект. Возникает при вычитании двух очень близких по величине чисел. Значимые разряды в мантиссе сокращаются, а погрешности, которые были в каждом из чисел, остаются и становятся относительно огромными в результате.
Пример:
a = 1.2345678901234
b = 1.2345678900000
a - b = 0.0000000001234 = 1.234e^(-10) (теряются многие значащие цифры).
Некоммутативность и неассоциативность: Из-за округления операции могут давать разные результаты при изменении порядка: (a + b) + c != a + (b + c), a + b != b + a в некоторых пограничных случаях (хотя коммутативность обычно сохраняется для + и *).
Особые значения: ±0, ±∞ (Inf), NaN (Not a Number - результат неопределенных операций типа 0/0, ∞ - ∞).