Согласен. Очередь - это очередь, стек - это стек, и фраза
>Для предотвращения ситуаций, когда обрабатываются только запросы с таймаутом, можно применять очередь «последним пришёл — первым ушёл», или LIFO (last-in first-out)
Пруф, пожалуйста, дайте, на ваш постулат: при написании строки с арифметическим выражением, если мы возводим отрицательное число в какую-либо степень, то мы должны заключить данный операнд в скобки
Стоп! Вот некая компания заказала нам небольшой проект, калькулятор вычисления стоимости металлических дверей.
Вы точно уверены, что все манагеры напишут (-2) ^ 2?
Или они напишут -2 ^ 2?
Спасибо. В любом случае php интерпретатор неверно высчитывает выражение
-2 ** 2
Это я к чему? Самым простым решением для задачи вычислить выражение из строки будет:
1. Провалидировать строку, и если выражение верное
2. Создать на лету php файл, записать в него выражение, и через exec получить результат вычисления
И не надо заморачиваться с алгоритмом.
Но:
1. Это неинтересно :)
2. Результат может быть неверным (-2 ** 2)
с точки зрения генератора исполняемого кода будет вычислено константное выражение -2 и в генерируемую последовательность опкодов будет записана единственная команда: запись значения константы в переменную
Из моего окружения никто не смог объяснить почему интерпретатор php всегда неверно считает выражение:
<?php
echo -2 ** 2;
Объясните, пожалуйста, что такого в этом выражении, что -2 не вычисляется? Мне действительно интересно. Заранее спасибо.
Опять же всё давно изобретено до нас, использовать мы будет классический алгоритм сортировочной станции. Просто распишем его максимально подробно и понятно.
унарный минус можно найти, убрать, и провести замену соответствующих последующих плюсов и минусов на противоположные знаки
Это как, приведите пример. Пожалуйста.
Например выражение -2 - -2
Что мы должны сделать с унарным минусом в начале строки?
Согласен. Очередь - это очередь, стек - это стек, и фраза
бессмысленна. Это как путать мягкое с теплым.
-2 ^ 2
Какой процент пользователей поставят её в скобки?
(-2) ^ 2
Если, это верное арифметическое выражение, то считаем.
Иначе выкидываем исключение.
Выражение
-2 ** 2
априори считается верным.Выражение
(-2) ** 2
тоже вернымВ первом случае php посчитает неверно. Во втором — верно. Кто неправ?
Вы точно уверены, что все манагеры напишут (-2) ^ 2?
Или они напишут -2 ^ 2?
-2 ** 2
Это я к чему? Самым простым решением для задачи
вычислить выражение из строки
будет:1. Провалидировать строку, и если выражение верное
2. Создать на лету php файл, записать в него выражение, и через exec получить результат вычисления
И не надо заморачиваться с алгоритмом.
Но:
1. Это неинтересно :)
2. Результат может быть неверным (-2 ** 2)
Из моего окружения никто не смог объяснить почему интерпретатор php всегда неверно считает выражение:
Объясните, пожалуйста, что такого в этом выражении, что -2 не вычисляется? Мне действительно интересно. Заранее спасибо.
Спасибо
Как-то даже неудобно себя чувствую
По правилам арифметики правильный ответ 0.25
Еще раз: пожалуйста приведите алгоритм того, что вы написали
Что значит в чем смысл? Мы никогда не знаем, что придет нам на вход.
Это как, приведите пример. Пожалуйста.
Например выражение
-2 - -2
Что мы должны сделать с унарным минусом в начале строки?