Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Сравнение с Float
 
 автор: OLi   (03.01.2013 в 20:23)   письмо автору
 
 

Есть переменная $size:
var_dump($size); дает float(-1)
Делаю сравнение на $size == (float)-1 и получаю false

Почему?

  Ответить  
 
 автор: Sfinks   (03.01.2013 в 21:35)   письмо автору
 
   для: OLi   (03.01.2013 в 20:23)
 

Этой проблеме сто лет в обед. Дело в том, что float - это не число, а модель числа. Лично я, сам не до конца понимаю как это реализуется на уровне ядра =) но знаю, что даже (float)0 != нулю. При работе с float в надцатом знаке после запятой появляется погрешность, поэтому и не равно. И об этом нужно всегда помнить при работе с данными с плавающей точкой в любом языке программирования и в любом диалекте баз данных и вообще везде. Для получения точного результата используйте round(), округляя float до нужного знака после запятой.

  Ответить  
 
 автор: OLi   (04.01.2013 в 00:23)   письмо автору
 
   для: Sfinks   (03.01.2013 в 21:35)
 

Думал об округлении. Проблема в том что функция у меня возвращает либо 1 либо -1

  Ответить  
 
 автор: Sfinks   (04.01.2013 в 02:06)   письмо автору
 
   для: OLi   (04.01.2013 в 00:23)
 

И какая связь с float?

  Ответить  
 
 автор: cheops   (05.01.2013 в 10:13)   письмо автору
 
   для: Sfinks   (03.01.2013 в 21:35)
 

>Лично я, сам не до конца понимаю как это реализуется на уровне ядра =) но знаю, что даже
>(float)0 != нулю.
Тут даже не на уровне ядра, а на уровне двоичной системы. Сколько бы байт не отводилось под число с плавающей точкой, количество нулей и единиц будет конечным, а для представления чисел вроде 1/3 нужна бесконечная мантисса (и таких чисел на самом деле довольно много и получаются они автоматически в результате деления и умножения). Т.е. ряд чисел сразу хранятся с ошибкой, а ряд ошибок образуется в результате деления и умножения. Сделать ничего практически нельзя на текущей архитектуре, только хранить числа в строках.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования