ProfiPHPProfiPHP
  1. Главная
  2. Типы данных PHP
  3. Числа с плавающей точкой (Float)

Числа с плавающей точкой (Float)

Числа с плавающей точкой, также известные как Float, Double или Real могут быть определены следующими синтаксисами:
$a = 1.234; 
$b = 1.2e3;
$c = 7E-10;
Размер числа с плавающей точкой зависит от платформы, хотя максимум, как правило составляет ~1.8e308 с точностью около 14 десятичных цифр (64-битный IEEE формат).

Различают две формы записи вещественного числа: стандартную и экспоненциальную. Экспоненциальная запись помимо мантиссы (целой и дробной части) содержит порядок, который начинается со строчной или прописной буквы Е и целого положительного (или отрицательного) числа. Так запись 1.2е-3 эквивалентна произведе­нию 1.2x10-3 (или 0.0012). Вещественное число 1.1e+2 (или 1.1e2) эквивалентно 1.1x102 (или 110.0).

Вещественные числа преобразуются в компьютерное представление с потерями. Это связано с тем, что некоторые дроби в десятичной системе счисления невоз­можно представить конечным числом цифр. Так дробь 1/3 в десятичной форме принимает периодическую форму 0.33333333..., и часть цифр приходится отбрасы­вать. Это приводит к тому, что при операциях могут накапливаться ошибки вычис­ления, например, число 1.3 может принимать форму 1.29999999... Такое поведение вещественных чисел следует учитывать в программах, особенно при сравнении их друг с другом.

Хотя ограниченная точность зависит от операционной системы, в PHP обычно используется формат двойной точности IEEE 754, дающий максимальную относительную ошибку округления порядка 1.11e-16. Неэлементарные арифметические операции могут давать большие ошибки, и, разумеется, необходимо принимать во внимание распространение ошибок при совместном использовании нескольких операций.

Кроме того, рациональные числа, которые могут быть точно представлены в виде чисел с плавающей точкой с основанием 10, например, 0.1 или 0.7, не имеют точного внутреннего представления в качестве чисел с плавающей точкой с основанием 2, вне зависимости от размера мантиссы. Поэтому они и не могут быть преобразованы в их внутреннюю двоичную форму без небольшой потери точности. Это может привести к неожиданным результатам.

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

Преобразовании строк в числа с плавающей точкой происходит так: если строка начинается с верного числового значения, будет использовано это значение. Иначе значением будет 0 (ноль). Для значений других типов преобразование будет сначала осуществлено в Integer и затем в число с плавающей точкой.

Проверять числа с плавающей точкой на равенство проблематично из-за их внутреннего представления. Тем не менее, существуют способы для их сравнения, которые работают несмотря на все эти ограничения.

Некоторые числовые операции могут возвращать значение, представляемое константой NAN. Данный результат означает неопределенное или непредставимое значение в операциях с плавающей точкой. Любое строгое или нестрогое сравнение данного значения с другим значением, кроме True, включая его самого, возвратит False.

Так как NAN представляет собой неограниченное количество различных значений, то NAN не следует сравнивать с другими значениями, включая ее саму. Вместо этого, для определения ее наличия необходимо использовать функцию Is_nan.

Добавить комментарий

Имя:
Текст комментария: