D>В итоге 4 же ответ, верно? 1 это ерунда какая то
Правильный ответ именно 1. Потому что между 3 и скобкой опущен знак умножения и выражение 3(8-6) является единым блоком для деления.
Если бы было записано 3*(8-6), то тогда 4.
O>если там перейти на вкладку Math input и вкопипастить 1/2x и 1/2*x совершенно разные вещи получаются O>а на вкладке natural language — вещи получаются одинаковые O>такие дела
спросил спеца по матану
Начнем с того, что пример изначально записан некорректно. В математике опускается знак умножения только между цифрой и буквой. А между цифрой и скобкой нет. Это во-первых. А во-вторых, даже если в какой-то там вселенной в алгебре реально умножение сильнее деления (хаха), то исходный пример вообще ни разу не алгебра, там ни одной буквы нет.
А уж то, какие правила записи математических выражений в разных программулях и как в зависимости от этого меняется результат — это вообще смешно обсуждать.
И каков же ответ? У опущенного умножения приоритет тот же, что эксплиситного, или повышен?
Почитал, пишут, что всё наоборот: в школьной алгебре приоритет умножения выше, чем у деления, и знак опускают, подчёркивая этот факт. Чему детей учат, извращуги.
Здравствуйте, Alekzander, Вы писали:
A>Почитал, пишут, что всё наоборот: в школьной алгебре приоритет умножения выше, чем у деления, и знак опускают, подчёркивая этот факт. Чему детей учат, извращуги.
Приоритет умножения выше по сравнению с чем? Любой компонент выражения неразрывно связан со своим знаком. В примере выше :3 — единый компонент. Поэтому не может быть никакого 3*2, может быть только :3*2 = 2/3.
Здравствуйте, pva, Вы писали:
pva>Приоритет умножения выше по сравнению с чем? Любой компонент выражения неразрывно связан со своим знаком. В примере выше :3 — единый компонент. Поэтому не может быть никакого 3*2, может быть только :3*2 = 2/3.
Чего? Кого?
Где здесь единый компонент?
expression
: term
| expression '+' term
| expression '-' term
;
term
: factor
| term '*' factor
| term '/' factor
| term '%' factor
;
factor
: primary
| '-' factor
| '+' factor
;
primary
: IDENTIFIER
| INTEGER
| FLOATING_POINT_LITERAL
| '(' expression ')'
;
Здравствуйте, sambl74, Вы писали:
A>>Почитал, пишут, что всё наоборот: в школьной алгебре приоритет умножения выше, чем у деления, и знак опускают, подчёркивая этот факт. Чему детей учат, извращуги.
S>Это происки англосаксов — https://tass.ru/obschestvo/6725047
Если синтаксический сахар (опускание знака умножения) должен всё упрощать, а на деле приводит к международным конфликтам, то это плохой синтаксический сахар.
Здравствуйте, Jester, Вы писали:
M>>Правильный ответ именно 1. Потому что между 3 и скобкой опущен знак умножения и выражение 3(8-6) является единым блоком для деления. M>>Если бы было записано 3*(8-6), то тогда 4.
J>Я очень надеюсь, что с такой логикой Вы либо не являетесь нашим коллегой, либо не пишете никаких критичных систем.
Вообще, признаться забыл, что знак умножения ВСЕГДА имеет приоритет перед делением. Так что есть или нет там знака * правильный ответ всегда 1. Так как всегда сначала 3 умножается на (8-6).
Нашёл этот учебник 1967 года и спросил у профессора математики:
— Это ещё актуально? (скриншот из учебника, как на yaplakal.com)
— Видимо нет. Вопрос как договориться. Лучше ставить скобки, зачем путать людей такой формой записи?
— Получается, что в этом примере (скриншот из корневого сообщения) у тебя получается 4 без вариантов?
— Да.
Здравствуйте, Pzz, Вы писали:
Pzz>Чего? Кого? Где здесь единый компонент?
Люди чуть поумнее компиляторов. Впрочем, не все, да.
Ты своих детей младшей школе тоже через грамматики учил? И как твоя грамматика обрабатывает школьные упрощения типа 99 + 98 — 97 = 99 + 1 или (99 — 97) + 98?
А школьнику достаточно просто понять что (+99) + (+98) + (-97) можно менять местами как угодно по переместительному закону, равно как и a : b * c = (a) * (1:b) * (c).
В выражении выше :3 = (1:3) поэтому нельзя 3 * 2.
Здравствуйте, Michael7, Вы писали:
M>Правильный ответ именно 1. Потому что между 3 и скобкой опущен знак умножения и выражение 3(8-6) является единым блоком для деления. M>Если бы было записано 3*(8-6), то тогда 4.
Я очень надеюсь, что с такой логикой Вы либо не являетесь нашим коллегой, либо не пишете никаких критичных систем.
Здравствуйте, graniar, Вы писали:
G>Вот поэтому-то, когда возникают малейшие сомнения в приоритете операторов, стоит поставить лишние скобки и не заморачиваться.
что, даже в алгебре бывает Undefined Behavior? Весьма неожиданно
Здравствуйте, Michael7, Вы писали:
M>Вообще, признаться забыл, что знак умножения ВСЕГДА имеет приоритет перед делением. Так что есть или нет там знака * правильный ответ всегда 1. Так как всегда сначала 3 умножается на (8-6).
Здравствуйте, wl., Вы писали:
wl.>Здравствуйте, graniar, Вы писали:
G>>Вот поэтому-то, когда возникают малейшие сомнения в приоритете операторов, стоит поставить лишние скобки и не заморачиваться.
wl.>что, даже в алгебре бывает Undefined Behavior? Весьма неожиданно
В алгебре нет, а вот у нейронных сетей бродящих вокруг результаты бывают непредсказуемыми.
Здравствуйте, Alekzander, Вы писали: A>И каков же ответ? У опущенного умножения приоритет тот же, что эксплиситного, или повышен?
то, что в скобках будет вычислено первым, а деление на 6 под чертой будет последним, поэтому сводится до того, чему равно
36/3*2
вообще у такого кривого деления приоритет такой же как умножения (длинная черта при делении на 6 не случайно стоит) и по сути делиться должно то что над чертой на то что под чертой
Здравствуйте, Alekzander, Вы писали:
A>Почитал, пишут, что всё наоборот: в школьной алгебре приоритет умножения выше, чем у деления, и знак опускают, подчёркивая этот факт. Чему детей учат, извращуги.
Есть тут родители школьников? Дайте в учебник посмотреть!
Здравствуйте, Alekzander, Вы писали:
A>Почитал, пишут, что всё наоборот: в школьной алгебре приоритет умножения выше, чем у деления, и знак опускают, подчёркивая этот факт. Чему детей учат, извращуги.
Здравствуйте, __kot2, Вы писали:
__>то, что в скобках будет вычислено первым, а деление на 6 под чертой будет последним, поэтому сводится до того, чему равно __>36/3*2 __>вообще у такого кривого деления приоритет такой же как умножения (длинная черта при делении на 6 не случайно стоит) и по сути делиться должно то что над чертой на то что под чертой
Бывает еще левая ассоциативность/правая ассоциативность. Ну т.е., последовательность действий с одинаковым приоритетом не обязательно именно слева направо исполняется.
Интересно, что споры такого рода периодически возникают вокруг. Что это, разная ассоциативность операций в зависимости от культуры, или просто народ выражает сво@ творческое многообразие?
Здравствуйте, Real 3L0, Вы писали:
A>>Почитал, пишут, что всё наоборот: в школьной алгебре приоритет умножения выше, чем у деления, и знак опускают, подчёркивая этот факт. Чему детей учат, извращуги.
R3>Есть тут родители школьников? Дайте в учебник посмотреть!
Если что, я это прочитал не в учебнике, а на каком-то форуме, так что не поручусь за достоверность.
если там перейти на вкладку Math input и вкопипастить 1/2x и 1/2*x совершенно разные вещи получаются
а на вкладке natural language — вещи получаются одинаковые
такие дела
Как много веселых ребят, и все делают велосипед...
O>если там перейти на вкладку Math input и вкопипастить 1/2x и 1/2*x совершенно разные вещи получаются O>а на вкладке natural language — вещи получаются одинаковые O>такие дела
так, а исходная задача написана в math или в natural input?
вообще это задача из разряда "угадай способ мышления вопрошающего". Т.е. не про математику, а про чтение мыслей
В>вообще это задача из разряда "угадай способ мышления вопрошающего". Т.е. не про математику, а про чтение мыслей
Таки да, потому и срач. Многолетний кстати уже
Как много веселых ребят, и все делают велосипед...
Здравствуйте, Michael7, Вы писали:
M>Правильный ответ именно 1. Потому что между 3 и скобкой опущен знак умножения и выражение 3(8-6) является единым блоком для деления.
M>>Правильный ответ именно 1. Потому что между 3 и скобкой опущен знак умножения и выражение 3(8-6) является единым блоком для деления.
MD>Это какая-то новая спека от комитета по Мат++?
Старая. Называется арифметическая и алгебраическая запись умножения.
D>В итоге 4 же ответ, верно? 1 это ерунда какая то
Насчет 4 при знаке * я должен признаться, что невольно ввел в заблуждение в предыдущем посте. Немного проверил и действительно правильный ответ всегда 1.
Аналогично. Спросил своего коллегу (д.т.н.) занимающегося математикой — говорит ерунда написана, не морочь людям голову.
Про приоритет умножения перед делением сказал то же самое.
Я видел скриншот из книги, представленный на ЯП, но что это за учебник искать, признаюсь, не стал. Ссылок и названия книги на скринах нет.
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)
Короче, как по мне, вся эта каша из пальца высосана. Как тут уже много раз предлагали — не надо мудрить, а если есть разночтения — использовать скобки.
Здравствуйте, nikkit, Вы писали:
N>спросил спеца по матану
N>
N>исходный пример вообще ни разу не алгебра, там ни одной буквы нет.
Элемента́рная а́лгебра — самый старый раздел алгебры, в котором изучаются алгебраические выражения и уравнения над вещественными и комплексными числами.
Алгебраическим выражением называется одна или несколько алгебраических величин (чисел и переменных), связанных между собой знаками арифметических операций: сложения, вычитания, умножения и деления, а также извлечения корня и возведения в степень (причём показатели корня и степени должны обязательно быть целыми числами) и знаками последовательности применения этих операций (обычно скобками различного вида).
Здравствуйте, Кодт, Вы писали:
A>>P.S. Не, ну, в принципе, 3 is not a function тоже сгодится (так говорит Джаваскрипт).
К>Это в жабаскрипе 3 не функция. А в обычной жизни — функция.
К>Вот смотрим: К>sin x — "грешить x" К>cos x — "согрешить x" К>sin cos x = sin ( cos ( x ) ) К>у оператора пробельной аппликации правая ассоциативность
К>sin 3 x = sin ( 3 * x ) К>3 sin x = 3 * ( sin ( x ) )
К>аппликация множителя к множимому — одноместная функция кратности.
Как тогда быть с выражением 3 ( 3 )? Утонуть в рекурсивности? Жаловаться на недостаток аргументов (как моя бывшая)? А, понял: у неё параметр имеет значение по умолчанию, равное 1.
Здравствуйте, Alekzander, Вы писали:
A>Как тогда быть с выражением 3 ( 3 )? Утонуть в рекурсивности? Жаловаться на недостаток аргументов (как моя бывшая)? А, понял: у неё параметр имеет значение по умолчанию, равное 1.
Никак нет.
Просто у этой сущности есть несколько интерфейсов.
Интерфейс "просто число". Со всеми свойствами чисел.
И интерфейс "функция". С оператором применения.