Почему = -x ^ 2 + x для x = 3 в Excel приводит к 12 вместо -6?

96

Предположим, что моя ячейка A1 в таблице Excel содержит номер 3 . Если я введу формулу

= - A1^2 + A1

в A2 тогда A2 показывает число 12, когда оно должно показывать -6 (или -9 + 3)

Почему это? Как я могу предотвратить это вводящее в заблуждение поведение?

Родольфо Овьедо
источник
19
Отрицательное число в квадрате - это положительное число. Что бы сделать формулу 9 + 3. - (А1) ^ 2 даст вам -6.
Ramhound
68
@Ramhound Powers имеют более высокий приоритет, чем знаки минус в любой нормальной среде.
Никто
17
Должно быть - (A1 ^ 2) чтобы получить -6 ... вам нужна скобка вокруг операции, а не только число. Excel отлично подходит для математики, но вы должны соблюдать порядок операций, а в случае сомнений используйте круглые скобки!
SnakeDoc
13
Это все о порядке операций и ничего общего с Excel.
Ещё один случайный пользователь
11
Всем тем комментаторам, критикующим математические навыки ОП: в стандартной чистой математике это должно быть однозначно оценено до -6. В частности, отрицательный всегда означает 0-x (как указано в ответе). Введение унарного - это тема, которая является новой в прикладной информатике, и почти всегда просто деталь реализации. Критиковать OP за непонимание этого - все равно что ответить на вопрос о путанице в отношении ошибок с плавающей запятой: «Программа в порядке. Вам просто нужно проверить свою математику. Посмотрите, если вы напишите эти числа в двоичном виде, то ...»
DreamConspiracy

Ответы:

136

Краткий ответ

Чтобы решить эту проблему, просто добавьте 0 перед знаком равенства

= 0 - A1^2 + A1

или добавьте пару круглых скобок, чтобы заставить стандартный порядок операций

= - (A1^2) + A1

или заменить знак минус его общей интерпретацией умножения на -1

= -1 * A1^2 + A1

В этом конкретном случае, когда у вас есть дополнительный член + A1, лучшее решение - это то, что предлагает @ lioness99a:

= A1 - A1^2

Детальное объяснение

В соответствии с соглашениями Excel,

= - 3^2

равно (-3) ^ 2 = 9, а

= 0-3^2

равно 0-9 = -9.

Почему добавление только 0 меняет результат?

Знак минус в -3 ^ 2 , которому не предшествует minuend, считается оператором отрицания , который является унарным оператором (только с одним аргументом), который меняет знак следующего числа (или выражения). Однако знак минус в 0-3 ^ 2 является оператором вычитания , который является двоичным оператором, который вычитает то, что следует -из того, что предшествует -. Согласно соглашениям Excel, оператор возведения в степень^ вычисляется после оператора отрицания и перед оператором вычитания . См. «Операторы вычисления и приоритет в Excel» , раздел «Порядок, в котором Excel выполняет операции в формулах».

Стандартное математическое соглашение состоит в том, что возведение в степень вычисляется до отрицания и вычитания или, проще говоря, ^вычисляется раньше -. Позорно, Excel выбрал различные соглашения из правил алгебры, школьных учебников, академического письма, научных калькуляторов, Lotus 1-2-3, Mathematica, Maple, языков, ориентированных на вычисления, таких как Fortran или Matlab, MS Works и ... VBA ( язык, используемый для написания макросов Excel), К сожалению, Calc для LibreOffice и Google Sheets придерживаются одного и того же соглашения для совместимости с Excel. Тем не менее, размещение выражения в окне поиска Google или панели дает отличные результаты. Если вы нажмете ввод, порядок вычислений будет дан с использованием скобок. Дискуссия, в которой математик убивает аргументы «ученого-компьютерщика», защищающего преимущество отрицания над возведением в степень: http://mathforum.org/library/drmath/view/69058.html

Общие обходные пути

Если вы хотите вычислить

- Anything ^ 2,

добавить 0 перед знаком равенства

0 - Anything ^ 2

или добавьте пару круглых скобок, чтобы заставить стандартный порядок операций

- ( Anything ^ 2 )

или заменить знак минус его общей интерпретацией умножения на -1

-1 * Anything ^ 2

Из вышеупомянутых альтернатив я предпочитаю добавлять знак 0 перед знаком минус, потому что это наиболее практично. Если выражение уже заключено в круглые скобки, я избегаю добавлять круглые скобки. Интенсивное использование скобок затрудняет чтение, отладку и запись выражений.

Если добавлен дополнительный термин (или вычтен без проблемы четной мощности),

- Anything ^ 2 + ExtraTerm,

лучшее решение - разместить ExtraTerm первым,

ExtraTerm - Anything ^ 2.

В комментарии к другому ответу говорится, что единственный случай, когда вы должны знать о нестандартном правиле приоритета, - это когда знак минус следует за знаком равенства (= -). Однако есть и другие примеры, такие как = exp (-x ^ 2) или = (- 2 ^ 2 = 2 ^ 2), где перед знаком минус нет миньенда.

Спасибо @BruceWayne за предложение короткого ответа, который я написал в начале.

Вы можете быть заинтересованы в соответствии с Excel, 4 ^ 3 ^ 2 = (4 ^ 3) ^ 2. Это действительно стандартное математическое соглашение?

Родольфо Овьедо
источник
1
Комментарии не для расширенного обсуждения; этот разговор был перенесен в чат .
DavidPostill
Пожалуйста, смотрите выше. Все комментарии будут удалены, если они не являются частью обсуждения в чате.
DavidPostill
20

Немного более лаконично, чем ответ Родольфо, вы можете использовать:

=-(A1^2)+(A1)

(Правка: я совершенно не видел, что это был вопрос / ответ.)

Брюс Уэйн
источник
1
Именно так! В зависимости от того, каким языком или правилами приоритета приложения будет то, что, по вашему мнению, они должны быть, это способ решить проблему.
jamesqf
2
@jamesqf, но в этом должен быть какой-то смысл и ограничения. Никто не пишет 2+ (3 * 4). Если язык имеет арифметические операции и какие-либо правила приоритета вообще, он обязательно должен поддерживать все стандартные математические соглашения. В Excel нет оправдания такой ошибке.
Зевс
4
@ Зевс: Никто? Я бы, наверное, особенно если бы это было в более сложном выражении или в условии if. Конечно, я написал бы 3 * 4 + 2, даже если бы оставлял парены.
jamesqf
3
У меня долгое время было подозрение, что такая привычка чрезмерного употребления паренов возникает из-за (о, настолько распространенного) чрезмерного воздействия C (и его синтаксических потомков). Но C ни в коем случае не является хорошим примером правильного следования математическим правилам, включая приоритет (плюс у него есть проблемы с макросами). В отличие от этого, люди с первоначальным знакомством с большим количеством академических систем / языков сильно ожидают правильного дизайна и не склонны идти вперед на уступки «на всякий случай». Отсюда и настоящие сюрпризы, как в ОП.
Зевс
14

Ведущий -считается частью первого срока.

=-3^2 обрабатывается как (-3)^2 = 9

С нулем в начале вместо этого он рассматривается как нормальное вычитание.

=0-3^2 обрабатывается как 0 - 3^2 = -9

И если у вас есть два оператора, то произойдет то же самое.

=0--3^2обрабатывается как 0 - (-3)^2 = -9и =0+-3^2обрабатывается как0 + (-3)^2 = 9

охотник, ставящий капканы
источник
4

Потому что Excel интерпретирует ваше уравнение как:

(-x) ^ 2 + x

Когда вы хотели:

- (х ^ 2) + х

Чтобы предотвратить нежелательное поведение такого рода, я считаю, что лучше всего использовать скобки для определения вашей собственной системы приоритетов, поскольку отрицание - это не то же самое, что вычитание, и, следовательно, оно не охватывается PEMDAS. Пример будет выглядеть так:

(- (х ^ 2)) + X

Это может быть излишним, но я гарантирую, что Excel ведет себя так, как я хочу.

routhken
источник
4
«Поскольку PEMDAS не гарантируется в Excel» - нет, это абсолютно гарантировано в Excel. Все остальное было бы безумием. PEMDAS не рассматривает вопрос о том, имеет ли унарное отрицание (которое отличается от вычитания!) Приоритет над возведением в степень.
Конрад Рудольф
1
@routhken Интенсивное использование скобок делает написание, редактирование и отладку громоздкими. Чтобы облегчить эти задачи, я проверяю приоритет операторов в программном обеспечении, с которым я работаю, и использую только необходимые скобки. Кроме того, я добавляю пробелы для улучшения читабельности.
Родольфо Овьедо
@KonradRudolph Я отредактировал свой ответ, спасибо за разъяснения.
Роткен
1
Я бы предпочел использовать x - x^2. Это гарантирует - интерпретируется как оператор двоичного вычитания.
Ксалори
@KonradRudolph Я думаю, что способ взглянуть на это заключается в том, что электронные таблицы и языки программирования используют PUEMDAS, где унарные операции оцениваются после операций с круглыми скобками, но перед двоичными математическими операциями.
Ксалори
3

Это выражение = - A1^2 + A1относится только к Excel, поэтому должно следовать правилам Excels. Вопреки некоторым другим ответам здесь, нет правильного порядка приоритета. Есть просто разные соглашения, принятые разными приложениями. Для справки, порядок приоритета, используемый Excel:

:       Range
<space> intersection
,       union
-       Negation
%       Percentage
^       Exponential
* and / Multiplication and Division
+ and - Addition and Subtraction
&       Concatenation
= < > <= >= <>  Comparison

Который вы можете переопределить с помощью скобок.

Пол Смит
источник
9
Конечно, Excel мог бы выбрать + для обозначения умножения и * для обозначения вычитания и т. Д., И любой, кому нужно использовать Excel, должен был это знать. Но это было бы неправильно. В данном случае это не тот же уровень неправильности (или глупости), но вы определенно можете утверждать, что в Excel определены неправильные приоритеты.
Mormegil
4
@ Mormegil Хорошо сказано! Как только вы попытаетесь = 1 + 2 * 2 и увидите, что ответом будет 5, а не 6. Вы должны предположить, что Excel следует правилам алгебры. Какой смысл вводить людей в заблуждение?
Родольфо Овьедо
Существует правильный порядок приоритета, но на компьютерах есть дополнительные операции. Проблема здесь в том, что компьютеры используют «-» для отрицания И для вычитания, когда человек, выполняющий письменную алгебру, различает отрицание и вычитание. Для того, чтобы компьютер понял разницу, ему нужен набор правил. В '-x' '-' является унарным оператором (действует на один операнд). В '1-x' '-' - бинарный оператор. Итак, Excel (и другое компьютерное программное обеспечение) преобразует -x ^ 2 в (-x) ^ 2. Остальная часть порядка старшинства все еще применяется, поскольку мы все изучили это в начальной школе.
Ксалори
3
@Xalorous: Да, -может быть одинарным или двоичным. Но это не подразумевает порядок операций. Другие языки понимают это правильно: в Python, Ruby, Octave, Awk и Haskell (первые пять языков с оператором возведения в степень, которые пришли в голову), -3 ** 2всегда оценивается как -9. Почему? Потому что это правильный ответ.
wchargin
1
@Xalorous человек, делающий письменную алгебру, использует соглашения своей аудитории в сочетании с круглыми скобками, чтобы уменьшить двусмысленность. Не существует правильного порядка старшинства, и правила алгебры на самом деле просто соглашения.
Пол Смит
3

Вы можете получить это любым способом:

=-A1^2+A1

вернет 12 , но:

=0-A1^2+A1

вернет -6

Если вы чувствуете, что возвращение 12 нарушает здравый смысл; знать, что Google Sheets делает то же самое.

Ученик Гэри
источник
1
Кажется, что унарный знак минус имеет «слишком высокий» приоритет.
Андреас Рейбранд
@AndreasRejbrand Кажется, что он унитарный, только если он непосредственно следует за знаком = ............... =A1-A1^2и возвращает -6
Gary's Student
2
Но в примере A1 - A1 ^ 2 знак минус явно двоичный. ( Унарный оператор - это оператор, который принимает один операнд (например, унарный знак минус в -5 или факториал, знак не и т. Д.); Бинарный оператор - это оператор, который принимает два операнда (например, двоичный плюс, минус, умножение, объединение и т. д.).) Обратите внимание, что знак минус может быть одинарным, даже если он не следует сразу после знака равенства: 5 + (-4 + 3).
Андреас Рейбранд
@ AndreasRejbra, и я с тобой полностью согласен!
Студент Гари
Просто, чтобы защитить репутацию Google, попробуйте поле или строку поиска для ввода математических выражений. Вы получите очень хорошие результаты в соответствии с хорошей математикой, даже лучше, чем в Matlab или Octave, например, попробуйте 2 ^ 1 ^ 2.
Родольфо Овьедо
3

В качестве альтернативы, вы могли бы просто сделать

= A1 - A1^2

потому что -y + x = x-y

lioness99a
источник
Это не объясняет, почему это должно работать, и дублирует многочисленные предыдущие ответы.
fixer1234
@ fixer1234 Буквально никто другой не сказал этого, и я дал математическую причину для этого?
lioness99a
1. Многие ответы описывают превращение этого в явное вычитание. 2. Это не математическая причина. Вопрос в том, почему Excel так себя не ведет. Ответ в том, что отрицание не рассматривается Excel как вычитание.
fixer1234
Они спросили, как предотвратить поведение. Я показал им самый простой способ. И ни в одном ответе не указано, что у меня есть ...
lioness99a
Лучшее решение Я добавил к своему ответу с должным доверием. Если вам понравился ВОПРОС, пожалуйста, подпишите его.
Родольфо Овьедо
2

Другие люди ответили: «Как я могу избежать этого?» часть вопроса. Я собираюсь рассказать вам, почему это происходит.

Это происходит потому, что персональные компьютеры в 1979 году имели очень ограниченные возможности памяти и обработки.

VisiCalc был представлен для Apple II в 1979 году, за два года до первоначального выпуска IBM PC (на котором большинство современных настольных и портативных компьютеров прослеживают свое прямое происхождение). Apple II может иметь до 64 КБ (65 536 байт) оперативной памяти, а для работы VisiCalc требуется как минимум 32 КБ. В некотором смысле, VisiCalc довольно широко считается «убийственным приложением» для Apple II и, возможно, действительно для персональных микрокомпьютеров в целом.

Чем меньше особых случаев и меньше формульного просмотра, тем проще (и, как следствие, меньше) код для анализа формулы электронной таблицы. Поэтому имеет смысл требовать, чтобы пользователь был несколько более явным в угловых случаях в обмен на возможность обработки больших таблиц. Помните, что даже с высококлассным Apple II у вас было всего несколько десятков килобайт для игры после того, как была учтена память, необходимая для приложения. В системе с малым объемом памяти (48 КБ ОЗУ не было необычной конфигурацией для «серьезной» машины), предел был еще ниже.

Когда IBM представила свой ПК, был создан порт VisiCalc для новой архитектуры. В Википедии этот порт называется «совместимым с ошибками» , поэтому вы очень ожидаете увидеть то же самое поведение при разборе формулы, даже если система технически способна к более сложному анализу.

Начиная с 1982 года Microsoft конкурировала с VisiCalc, а затем 1-2-3 с их кроссплатформенной электронной таблицей Multiplan . Позже Lotus 1-2-3 был представлен в 1983 году специально для IBM PC и быстро обогнал VisiCalc на нем. Чтобы облегчить переход, имело смысл проанализировать формулы так же, как VisiCalc. Таким образом, ограниченное прогнозное поведение будет перенесено вперед.

В 1985 году Microsoft представила для ПК Excel , первоначально для Macintosh и начиная с версии 2 в 1987 году. Опять же, чтобы облегчить переход, имело смысл перенести формулу поведения разбора, к которой люди уже привыкли к этому уже почти десятилетие.

С каждым обновлением Excel существовала возможность изменить поведение, но это не только требовало бы от пользователей изучения нового способа ввода формул, но также создавало бы риск нарушения совместимости с электронными таблицами, использованными или созданными в предыдущей версии. На все еще очень конкурентном рынке с несколькими коммерческими компаниями, конкурирующими друг с другом в каждой области, решение, вероятно, было принято, чтобы сохранить привычное поведение пользователей.

Перенесемся в 2019 год, и мы все еще застряли с формулой решений о поведении, изначально принятых не позднее 1978-1979 годов.

CVn
источник
mathforum.org/library/drmath/view/69058.html и macnauchtan.com/pub/precedence.html#_Aworks сообщают, что Lotus 1-2-3 следует общим алгебраическим соглашениям.
Родольфо Овьедо
0

Выражение - A1^2содержит два оператора: унарный оператор отрицания -и бинарный оператор возведения в степень ^. При отсутствии каких-либо круглых скобок возможны две интерпретации. Или:

-(A1^2)

или же:

(-A1)^2

Первый один говорит , что сначала сделать экспоненциацию с операндами A1и 2, а затем сделать отрицание по этому поводу .

Второй говорит: сначала сделай отрицание операнда A1, а затем возведи возведение в степень в результате этого и 2.

Как было сказано в комментариях к вопросу, полномочия имеют более высокий приоритет, чем знаки минус в любой нормальной среде. Это означает, что лучше всего, если система предполагает первый.

Тем не менее, Excel предпочитает второй.

Урок заключается в том, что если вы не уверены, является ли ваша среда здоровой или нет, включите скобки, чтобы быть в безопасности. Так что пиши -(A1^2).

Джепп Стиг Нильсен
источник
Это дублирует принятый ответ и другие предыдущие ответы.
fixer1234
-1

Это не проблема с Excel, а с показателями и негативами. Когда вы берете число и повышаете его до четной степени, вы отменяете отрицательный знак.

-x^2 + x == (-x * -x) + x 
x = 3  => (-3 * -3) + 3
       ==  9 + 3 => 12

Вам нужно использовать скобки и кратные -1

-1 * (x^2) + x
nitrodmr
источник
10
Это не то, как работают знаки. Должно быть: x = 3 => - (3 * 3) + 3 = 6. Excel просто не использует стандартное алгебраическое соглашение.
Хеннинг
3
@henning Как уже упоминалось в другом комментарии, в то время как это не «стандарт» условность, это конвенции, хотя и не самый распространенный. Поэтому говорить, что «это не так, как работают знаки», совершенно неверно. Скорее, это не то, как знаки работают в преобладающем использовании.
Конрад Рудольф
2
@KonradRudolph Достаточно справедливо. Признаюсь, я знаю только о преобладающем использовании, которое, я полагаю, и привело к путанице в OP.
Хеннинг
6
Нет, это абсолютно есть проблема с Excel. Excel использует неправильные правила для приоритета операторов.
Дауд ибн Карим
Обратите внимание на разницу между -x^2где х равен 3 и x^2где х -3. -x^2+xникогда не достигнет 12: wolframalpha.com/input/?i=-x%5E2%2Bx
Томас Уэллер
-2

-x ^ 2 + x где x = 3 Это пример квадратного уравнения Уравнение можно записать так: -3 * -3 + 3: Умножение имеет приоритет перед сложением, поэтому результат будет записан следующим образом: 9 + 3 : Почему = 9, потому что отрицательное число x отрицательное число дает положительный результат. Это можно проверить с помощью любого калькулятора, правила слайдов или любой компьютерной математической программы. Окончательный результат 9 + 3 = 12

Cripple2Cripple
источник
-3

Это просто очень простая математика.

Правило 1. Даже умножение отрицательных чисел приведет к положительному результату:

минус * минус = плюс

минус * минус * минус = минус

минус * минус * минус * минус = плюс

Это связано с тем, что минусы отменяют друг друга попарно.

Правило 2. Сила каждого числа определяет, что это число будет умножено само по себе несколько раз.

(2) ^ n, где n = 2 => 2 * 2 = 4

(-2) ^ n, где n = 2 => (-2) * (- 2) = 4

И если вы можете увидеть Правило № 1 ..

(-3) ^ n, где n = 3 => (-3) * (-3) * (-3) = 9 * (-3) = -27

Правило 3. Умножение и деление имеют более высокий приоритет, чем сложение и вычитание.

3 * 5 + 2 = 15 + 2 = 17

3 * (5 + 2) = 3 * 7 = 21

И есть ответ на ваш вопрос:

Объединение всех 3-х правил:

-х ^ 2 + х, где х = 3 => -3 ^ 2 + 3 = 9 + 3 = 12

Я советую вам проводить время каждый год и обновлять фундаментальные правила математики.

На самом деле это навык, который вы можете поддерживать и оставаться на вершине большой части мира, только зная основы математики.

Майкл Джон
источник
9
Когда вы пишете «Объединение всех 3-х предыдущих правил: -x ^ 2 + x, где x = 3 => -3 ^ 2 + 3 = 9 + 3 = 12», вы предполагаете, что -x ^ 2 = (-x) ^ 2. Вы не высказали это предположение раньше. Поэтому ваш вывод необоснован. На самом деле, если вы прочитаете учебник по математике или Википедию, вы заметите, что ваше подразумеваемое предположение не выполняется. Учебники по математике, научные труды и т. Д. Следуют предположению, что -x ^ 2 = - (x ^ 2)
Родольфо Овьедо
Правило 3 применяется к бинарным операторам, подобным +-*/, но не к унарным операторам, подобным -или +. Внеочередной оператор мощности выше *и /но унарные операторы имеют даже более высокий приоритет
phuclv
В ответ на @RodolfoOviedo вы не правы. Существует огромная разница между - (x) ^ 2 и -x ^ 2. И это вполне понятно. Нет смысла говорить об этом. Неуважение, сэр, но я чувствую, что вы только что попытались вернуться с пассивной агрессивной манерой. Извините, если я сказал что-то, что оскорбляет вас. Я здесь только для того, чтобы помочь.
Майкл Джон