Подробно об этом написано в литературе по программированию. А как ещё определить дробные числа?
Для процессора тип чисел не имеет значения, только разрядность. Это как бы условность. Можно даже задать свой формат чисел, но и алгоритмы их обработки должны быть определены соответственно.
Техника
Зачем используют числа с плавающей запятой?
научи меня, как еще можно решать задачи, требующие дробных чисел, да еще величины, не известной заранее!
вот у меня программа, по двум фотоснимкам вычисляет положение камеры в момент съемки и рассчитывает размеры объектов. Я не знаю, в чем выражены расстояния, я не знаю, используют ее для замеров под микроскопом или со спутника - как мне считать-то?
вот у меня программа, по двум фотоснимкам вычисляет положение камеры в момент съемки и рассчитывает размеры объектов. Я не знаю, в чем выражены расстояния, я не знаю, используют ее для замеров под микроскопом или со спутника - как мне считать-то?
Числа с плавающей точкой имеют ограниченную точность. Хотя это зависит от операционной системы, в PHP обычно используется формат двойной точности IEEE 754, дающий максимальную относительную ошибку округления порядка 1.11e-16. Неэлементарные арифметические операции могут давать большие ошибки, и, разумеется, необходимо принимать во внимание распространение ошибок при совместном использовании нескольких операций.
Кроме того, рациональные числа, которые могут быть точно представлены в виде чисел с плавающей точкой с основанием 10, например, 0.1 или 0.7, не имеют точного внутреннего представления в качестве чисел с плавающей точкой с основанием 2, вне зависимости от размера мантиссы. Поэтому они и не могут быть преобразованы в их внутреннюю двоичную форму без небольшой потери точности. Это может привести к неожиданным результатам: например, floor((0.1+0.7)*10) скорее всего вернет 7 вместо ожидаемого 8, так как результат внутреннего представления будет чем-то вроде 7.9999999999999991118....
Так что никогда не доверяйте точности чисел с плавающей точкой до последней цифры, и не проверяйте напрямую их равенство. Если вам действительно необходима высокая точность, используйте математические функции произвольной точности и gmp-функции.
Кроме того, рациональные числа, которые могут быть точно представлены в виде чисел с плавающей точкой с основанием 10, например, 0.1 или 0.7, не имеют точного внутреннего представления в качестве чисел с плавающей точкой с основанием 2, вне зависимости от размера мантиссы. Поэтому они и не могут быть преобразованы в их внутреннюю двоичную форму без небольшой потери точности. Это может привести к неожиданным результатам: например, floor((0.1+0.7)*10) скорее всего вернет 7 вместо ожидаемого 8, так как результат внутреннего представления будет чем-то вроде 7.9999999999999991118....
Так что никогда не доверяйте точности чисел с плавающей точкой до последней цифры, и не проверяйте напрямую их равенство. Если вам действительно необходима высокая точность, используйте математические функции произвольной точности и gmp-функции.
Похожие вопросы
- Сколько цифр после запятой в числе ПИ известно сегодня?
- представьте число 2018 в виде суммы 5 натуральных чисел так чтобы все цифры использованные в
- Если после запятой бесконечное кол-во цифр, то как приходим к целым числам?
- Плавающий танк. Как танк может плавать???
- Про странные числа.
- Каким образом телефон использует один кабель для соединения большого числа абонентов?
- Если корабли ходят, а не плавают, то почему должность называется "капитан дальнего плавания", а не хождения?
- Плавает частота на одной половине FM диапазона (88-96мГц), на второй половине (97-106мГц) - прием радиостанций отличный.
- Почему, когда на калькуляторе возводишь в квадрат отрицательное число, получаешь отрицательное число?
- Как создать случайное число?