Как стать автором
Обновить
7
0
Алексей Кулагин @proctoleha

web разработчик

Отправить сообщение
Отлично! Спасибо Вам огромнейшее!!! Вроде говорим об элементарных вещах, а как интересно! Спасибо еще раз!!! Буду пытаться думать :)
Пруф, пожалуйста, дайте, на ваш постулат: при написании строки с арифметическим выражением, если мы возводим отрицательное число в какую-либо степень, то мы должны заключить данный операнд в скобки
Ок, полностью абстрагируемся от внешнего мира. К нам прилетает строка -2 ^ 2
Какой процент пользователей поставят её в скобки?
(-2) ^ 2
Какое-то непонимание. Я фиг его знает, что прилетит снаружи.
Если, это верное арифметическое выражение, то считаем.
Иначе выкидываем исключение.

Выражение -2 ** 2 априори считается верным.
Выражение (-2) ** 2 тоже верным

В первом случае php посчитает неверно. Во втором — верно. Кто неправ?
Кстати да, пробовал. В консоли прямо написать. В js эту ситуацию обработали. В php — нет.
Стоп! Вот некая компания заказала нам небольшой проект, калькулятор вычисления стоимости металлических дверей.
Вы точно уверены, что все манагеры напишут (-2) ^ 2?
Или они напишут -2 ^ 2?
Спасибо. В любом случае php интерпретатор неверно высчитывает выражение
-2 ** 2
Это я к чему? Самым простым решением для задачи вычислить выражение из строки будет:
1. Провалидировать строку, и если выражение верное
2. Создать на лету php файл, записать в него выражение, и через exec получить результат вычисления

И не надо заморачиваться с алгоритмом.
Но:
1. Это неинтересно :)
2. Результат может быть неверным (-2 ** 2)
Почему в выражении -2 ** 2 унарный минус имеет меньший приоритет, а выражении -2 ** -2 бОльший?
Хм, не надо никогда делать скоропалительных выводов, операторы * и / тоже имеют больший приоритет
<?php
echo -2 ** 2; // -4 неверно
echo PHP_EOL;
echo -2 ** -2; // -0.25 верно
echo PHP_EOL;
echo -2 * -2; // 4 верно
echo PHP_EOL;
echo -2 / -2; // 1 верно
echo PHP_EOL;
Огромное спасибо за комментарий.
с точки зрения генератора исполняемого кода будет вычислено константное выражение -2 и в генерируемую последовательность опкодов будет записана единственная команда: запись значения константы в переменную

Из моего окружения никто не смог объяснить почему интерпретатор php всегда неверно считает выражение:
<?php
echo -2 ** 2;

Объясните, пожалуйста, что такого в этом выражении, что -2 не вычисляется? Мне действительно интересно. Заранее спасибо.
Упс, делаю несколько дел одновременно, конечно же -0.25
Спасибо
Ай-яй
Вопрос. Ответ на него очень простой — будет 2

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

Еще раз: пожалуйста приведите алгоритм того, что вы написали
Ну так-то время на решение задачи ограничено
Вы не ответили на мой вопрос.
Любопытная конечно запись, и какой смысл вот так писать унарные минусы: -2 — -2

Что значит в чем смысл? Мы никогда не знаем, что придет нам на вход.
Не могу ответить на ваш вопрос. Есть установленный руководством порядок проведения аттестации, есть корпоративная этика.
Читайте, пожалуйста, внимательнее
Опять же всё давно изобретено до нас, использовать мы будет классический алгоритм сортировочной станции. Просто распишем его максимально подробно и понятно.


унарный минус можно найти, убрать, и провести замену соответствующих последующих плюсов и минусов на противоположные знаки

Это как, приведите пример. Пожалуйста.
Например выражение -2 - -2
Что мы должны сделать с унарным минусом в начале строки?
Ну тут уж дело вкуса. Вначале у меня был ваш вариант, потом я его изменил, на приведенный в статье. Вроде как он более прозрачен. А может и нет :)
Что такое — вертикальное масштабирование? Подозреваю, что это покупка более дорогой редакции. Если, да — то нет, не помогло.
Лапшекод не способен быстро работать в принципе

Информация

В рейтинге
Не участвует
Откуда
Нерехта, Костромская обл., Россия
Дата рождения
Зарегистрирован
Активность