[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Неправильная арифметика в PHP
T1grOK
Недавно обнаружил некоторую странность при выполнении математических операций в PHP.
Детали по ссылке https://t1grok.net/2017/03/27/nepravilnaya-arifmetika-v-php/

_____________
Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
sergeiss
А если открыть доку и прочитать внимательно? Вот тут вот: http://php.net/manual/ru/language.operators.precedence.php
Цитата

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

//Пример #2 Неопределенный порядок вычисления
<?php
$a = 1;
echo $a + $a++; // может вывести как 2 так и 3

$i = 1;
$array[$i] = $i++; // может установить индекс как 1 так 2
?>


_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
T1grOK
Как по мне это ненормально. Если язык предоставляет определенные возможности, то их можно и нужно использовать. Если какая либо возможность является исключением, то и результат всегда должен быть "исключительным", а не так могу выдать такой результат, а могу эдакий ("как захочу").
Анархия получается.

_____________
Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
sergeiss
Может это и не правильно, что так отрабатывает. Но по "твоей" ссылке написано
Цитата
После пришел к выводу, что рекурсивные вызовы в PHP при определенных условиях работают «с кривизной»

хотя, замечу, рекурсивные вызовы тут вовсе не при чем!!! Проблема только в неправильном использовании автором автоинкрементных операторов.

Такой вывод очень похож на одну шутку smile.gif Типа как из новостей:
Цитата
Британские ученые доказали, что таракан слышит лапами.
Посадили таракана на стол, стукнули по столу - таракан убежал. ОК. Оторвали таракану лапы, посадили на стол. Стучали-стучали.... Таракан не убежал.
Вывод британских ученых: "таракан слышит ногами"


_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
Invis1ble
Недетерминированное поведение - это, конечно, печально. Но я для себя уже давно вывел простое эмпирическое правило написания кода, звучит оно примерно так: "не вы*бывайся!" biggrin.gif
Тем более, что читабельность кода, как правило, ухудшается.

_____________

Профессиональная разработка на заказ

Я на GitHub | второй профиль

T1grOK
Цитата (sergeiss @ 28.03.2017 - 12:47)
хотя, замечу, рекурсивные вызовы тут вовсе не при чем!!!

Я далееи написал, что проблема не в рекурсии...

_____________
Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
Эли4ка
А собственно зачем вам именно такой код?
T1grOK
Цитата (Эли4ка @ 29.03.2017 - 01:59)
А собственно зачем вам именно такой код?

Именно такой возможно и незачем, но есть множество других примеров, в которых может проявляться похожее поведение. Здесь даже дело не в практическом использовании, а в самом факте существования недетерминированности в данном контексте.

_____________
Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
brevis
Этот вопрос давно будоражит умы: ++i + ++i.

_____________
Чатик в телеге
Эли4ка
Просто когда извращаешься вот таким способом и получается черти что. Не делайте из математики херню и все. Нет такого выражения, которого нельзя заменить чисто математическим и адекватным. А ваши эти инкременты, детерминанты - это ни к чему.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.