Здравствуйте, graniar, Вы писали:
G>Вот поэтому-то, когда возникают малейшие сомнения в приоритете операторов, стоит поставить лишние скобки и не заморачиваться.
что, даже в алгебре бывает Undefined Behavior? Весьма неожиданно
Здравствуйте, Michael7, Вы писали:
M>Правильный ответ именно 1. Потому что между 3 и скобкой опущен знак умножения и выражение 3(8-6) является единым блоком для деления.
M>>Правильный ответ именно 1. Потому что между 3 и скобкой опущен знак умножения и выражение 3(8-6) является единым блоком для деления.
MD>Это какая-то новая спека от комитета по Мат++?
Старая. Называется арифметическая и алгебраическая запись умножения.
Здравствуйте, Jester, Вы писали:
M>>Правильный ответ именно 1. Потому что между 3 и скобкой опущен знак умножения и выражение 3(8-6) является единым блоком для деления. M>>Если бы было записано 3*(8-6), то тогда 4.
J>Я очень надеюсь, что с такой логикой Вы либо не являетесь нашим коллегой, либо не пишете никаких критичных систем.
Вообще, признаться забыл, что знак умножения ВСЕГДА имеет приоритет перед делением. Так что есть или нет там знака * правильный ответ всегда 1. Так как всегда сначала 3 умножается на (8-6).
D>В итоге 4 же ответ, верно? 1 это ерунда какая то
Насчет 4 при знаке * я должен признаться, что невольно ввел в заблуждение в предыдущем посте. Немного проверил и действительно правильный ответ всегда 1.
O>если там перейти на вкладку Math input и вкопипастить 1/2x и 1/2*x совершенно разные вещи получаются O>а на вкладке natural language — вещи получаются одинаковые O>такие дела
спросил спеца по матану
Начнем с того, что пример изначально записан некорректно. В математике опускается знак умножения только между цифрой и буквой. А между цифрой и скобкой нет. Это во-первых. А во-вторых, даже если в какой-то там вселенной в алгебре реально умножение сильнее деления (хаха), то исходный пример вообще ни разу не алгебра, там ни одной буквы нет.
А уж то, какие правила записи математических выражений в разных программулях и как в зависимости от этого меняется результат — это вообще смешно обсуждать.
Нашёл этот учебник 1967 года и спросил у профессора математики:
— Это ещё актуально? (скриншот из учебника, как на yaplakal.com)
— Видимо нет. Вопрос как договориться. Лучше ставить скобки, зачем путать людей такой формой записи?
— Получается, что в этом примере (скриншот из корневого сообщения) у тебя получается 4 без вариантов?
— Да.
Аналогично. Спросил своего коллегу (д.т.н.) занимающегося математикой — говорит ерунда написана, не морочь людям голову.
Про приоритет умножения перед делением сказал то же самое.
Я видел скриншот из книги, представленный на ЯП, но что это за учебник искать, признаюсь, не стал. Ссылок и названия книги на скринах нет.
Здравствуйте, Michael7, Вы писали:
M>Вообще, признаться забыл, что знак умножения ВСЕГДА имеет приоритет перед делением. Так что есть или нет там знака * правильный ответ всегда 1. Так как всегда сначала 3 умножается на (8-6).
M>>Вообще, признаться забыл, что знак умножения ВСЕГДА имеет приоритет перед делением. Так что есть или нет там знака * правильный ответ всегда 1. Так как всегда сначала 3 умножается на (8-6).
R3>
Здравствуйте, pva, Вы писали:
pva>Приоритет умножения выше по сравнению с чем? Любой компонент выражения неразрывно связан со своим знаком. В примере выше :3 — единый компонент. Поэтому не может быть никакого 3*2, может быть только :3*2 = 2/3.
Здравствуйте, Silver_S, Вы писали:
S_S>А здесь какой вариант лучше? S_S>
amount:count = am:c
S_S>
amount:count = am(ount)2:c
Что значит "лучше"? Нет здесь никакого "лучше", а только игра с неопределенностью записи. Считать ли знак ":" эквивалентом "/" или дробной черты?
Можешь переписать выражение выше в терминах сложения-вычитания и сразу станет понятно "какой вариант лучше".
pva>Что значит "лучше"? Нет здесь никакого "лучше", а только игра с неопределенностью записи.
Здесь вопрос — какое соглашение для приоритетов лучше. Неявное умножение для однобуквенных переменных должно бы иметь приоритет побольше, чем явные операции ab=a*b
В программировании однобуквенные переменные и неявные умножения не приживутся — слишком мало букв. Но сильно повышают читабельность арифметических выражений. Так что такой синтаксис актуальный, и с приоритетами не должно быть путаницы.
pva>Считать ли знак ":" эквивалентом "/" или дробной черты?
Это вроде синонимы, для операции деления. Нет смысла задавать разные приоритеты для ":" и "/".
Здравствуйте, Silver_S, Вы писали:
S_S> Здесь вопрос — какое соглашение для приоритетов лучше. Неявное умножение для однобуквенных переменных должно бы иметь приоритет побольше, чем явные операции ab=a*b
Как бы да, но с другой стороны — нет. 3a * 4b == 3 * 4 * a * b. Но мы же понимаем что нельзя записать 34ab из-за неоднозначности.
pva>>Считать ли знак ":" эквивалентом "/" или дробной черты? S_S>Это вроде синонимы, для операции деления. Нет смысла задавать разные приоритеты для ":" и "/".
Да, синонимы, но ведь пропуск * является синонимом самого умножения. Но почему-то a / bc трактуют как a / (b * c).
Здесь еще интересная тема написания дробей с целым, например 3 и 1/2. В строку не запишешь же 31/2. Остается только 3+1/2.
Так и символы : и / можно было бы разделить. Ведь дробь в строку писать сложно. Можно было бы сказать что a / expr == a / (expr). Например, "a / b * c" не является эквивалентом a * c / b, а означает a / (b * c)
Короче, как по мне, вся эта каша из пальца высосана. Как тут уже много раз предлагали — не надо мудрить, а если есть разночтения — использовать скобки.
Здравствуйте, wl., Вы писали:
wl.>Здравствуйте, graniar, Вы писали:
G>>Вот поэтому-то, когда возникают малейшие сомнения в приоритете операторов, стоит поставить лишние скобки и не заморачиваться.
wl.>что, даже в алгебре бывает Undefined Behavior? Весьма неожиданно
В алгебре нет, а вот у нейронных сетей бродящих вокруг результаты бывают непредсказуемыми.