Помощник
|
сколько будет 0.7 + 0.1, редкое состояние растерянности |
TAPAH
|
Сообщение
#1
|
||
|
|
||
|
|||
mmkulikov |
9.5.2016, 14:07;
Ответить: mmkulikov
Сообщение
#2
|
|
TAPAH, Да-с, любопытно...
Проблема в том, что $qwas - 0.8 не равно нулю Вот так, "чудеса" пропадают Код $qwas = round($qwas + 0.1, 2);
-------------------- VPS от 5€ |
|
|
TAPAH
|
Сообщение
#3
|
|
mmkulikov, "чудеса" так не пропадают! Таким образом можно выкрутится из ситуации. Спасибо за участие! Я сам придумал способ как обойти это "чудо", но я не могу найти грамотное объяснение по какой причине (0.7 + 0.1) НЕ РАВНО 0.8
!!?? Или можно поставить вопрос так: чему же тогда равно $qwas - 0.8 Сообщение отредактировал TAPAH - 9.5.2016, 14:22 |
|
|
mmkulikov |
9.5.2016, 14:25;
Ответить: mmkulikov
Сообщение
#4
|
|
TAPAH, Потому, что вот:
Код $qwas = 0.7; $qwas = $qwas + 0.1; var_dump($qwas - 0.8); float(-1.1102230246252E-16) РНР не одинок Код <!DOCTYPE html>
<html> <body> <script> var x = 0.3 - 0.2; var y = 0.2 - 0.1; document.write((x == y) + "<br>"); // false document.write((x == 0.1) + "<br>"); // false document.write(y == 0.1); // true </script> </body> </html> -------------------- VPS от 5€ |
|
|
TAPAH
|
Сообщение
#5
|
|
mmkulikov,
Код $qwas = 0.7; $qwas = $qwas + 0.1; var_dump($qwas); var_dump($qwas - 0.8); float(0.8) float(-1.11022302463E-16) ЧТО тут происходит!? У меня сейчас реально картина мира пошатнулась!!))))) Сообщение отредактировал TAPAH - 9.5.2016, 14:35 |
|
|
mmkulikov |
9.5.2016, 14:37;
Ответить: mmkulikov
Сообщение
#6
|
|
ЧТО тут происходит!? Это называется точность представления числа float в двоичной системе (погрешность и была выведена вторым примером) Для вычислений с float применяется правило: промежуточные вычисления идут с максимальной точностью, а результат округляется до нужной точности -------------------- VPS от 5€ |
|
|
TAPAH
|
Сообщение
#7
|
|
mmkulikov,
Хорошо. Исходим из этого. НО Код $qwas = 0.7; $qwas = $qwas + 0.1; var_dump($qwas); float(0.8) Почему тогда в самом первом примере условие if($qwas == 0.8) не срабатывает, а if($qwas == (0.7 + 0.1)) работает? Сообщение отредактировал TAPAH - 9.5.2016, 14:48 |
|
|
x64 |
9.5.2016, 15:10;
Ответить: x64
Сообщение
#8
|
|
Почему тогда в самом первом примере условие if($qwas == 0.8) не срабатывает, а if($qwas == (0.7 + 0.1)) работает? Очевидно потому, что (.7 + .1) != .8 Код var_dump( (int) ((.1+.7) * 10), (int) (.8 * 10) ); /* int(7) int(8) */ Почему так? Можете глянуть тут. Это не косяк пыха, это проблема представления нашей системы счисления в компьютерной (двоичной). Этот же «баг» воспроизводится на JS (выше подметили). |
|
|
profican |
9.5.2016, 19:44;
Ответить: profican
Сообщение
#9
|
|
|
Цитата ...проблема представления нашей системы счисления в компьютерной (двоичной). Типов людей на Земле немного, всего 10. Те, кто понимают двоичную систему, и те, кто - нет. Старая шутка.
-------------------- Успехов! ♥ Тестирование сайтов ♠ |
|
|
||
|
Похожие темы
Тема | Ответов | Автор | Просмотров | Последний ответ | |
---|---|---|---|---|---|
Будет ли склейка сайтов если старый телефон перенести на новый сайт? | 2 | noviktamw | 617 | Вчера, 23:05 автор: Liudmila |
|
Сайты с доходом на продажу. Будет ли спрос? | 46 | Telnor | 45103 | 30.3.2024, 15:37 автор: trustedadvisor |
|
Сколько времени нужно для раскачки нового сайта? | 29 | metvekot | 8058 | 8.3.2024, 15:41 автор: malamut |
|
Сколько стоит сделать шаблон для WP? изучаю цены |
3 | Palundra | 2411 | 2.4.2022, 3:06 автор: WebSuccessful |
|
Сколько будет стоить лого для сайта? | 1 | tsa | 4257 | 28.8.2021, 9:41 автор: 0pium |
Текстовая версия | Сейчас: 26.4.2024, 7:23 |