Почему большинство языков программирования только дает один ответ на квадратный корень 4?

В запросе на обновление дубликата ключа имеет немного другой синтаксис :

INSERT INTO  selfesteemscore (
      selestscore
    , UserID
) VALUES(
      'NEW VALUE'
    , 'NEW USER ID VALUE'
)
ON DUPLICATE KEY UPDATE 
      selestscore = 'NEW VALUE'
    , UserID = 'NEW USER ID VALUE'
;

Или лучше, чтобы не повторять новые значения дважды:

INSERT INTO  selfesteemscore (
      selestscore
    , UserID
) VALUES(
      'NEW VALUE'
    , 'NEW USER ID VALUE'
)
ON DUPLICATE KEY UPDATE 
      selestscore = VALUES(selestscore)
    , UserID = VALUES(UserID)
;

ПРЕДУПРЕЖДЕНИЕ: читайте об SQL-инъекциях и escape-значениях или используйте операторы prapered.

P.S. Вы инициализируете переменную $ userId, но позже используете переменную $ userID

15
задан Nosredna 23 June 2009 в 22:51
поделиться

12 ответов

Потому что:

  • В математике √ x обычно, если не указано иное, относится к главному (т.е. положительному) корню из x [ http://mathworld.wolfram.com/SquareRoot.html] .
  • Некоторые языки не могут возвращать более одного значения.
  • Поскольку вы можете просто применить отрицание, возвращая оба будут избыточными.
37
ответ дан 30 November 2019 в 23:47
поделиться

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

1
ответ дан 30 November 2019 в 23:47
поделиться

Потому что реализация нескольких возвращаемых типов утомляет. Если вам действительно нужен другой результат, достаточно ли просто умножить результат на -1?

5
ответ дан 30 November 2019 в 23:47
поделиться

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

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

О мнимых числах.

1
ответ дан 30 November 2019 в 23:47
поделиться

Я думаю, потому что функция называется "sqrt", и если вам нужно несколько корней, вам придется вызвать функцию "sqrts", которой не существует, поэтому вы не можете сделай это.

Более серьезный ответ заключается в том, что вы предлагаете конкретный пример более серьезной проблемы. Многие уравнения и обычно обратные функции (включая sqrt) имеют несколько возможных решений, таких как arcsin и т. Д., И это, как правило, проблема. Например, с помощью arcsin нужно ли возвращать бесконечное количество ответов? См., Например, обсуждение разветвлений .

2
ответ дан 30 November 2019 в 23:47
поделиться

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

10
ответ дан 30 November 2019 в 23:47
поделиться

В математике всегда предполагается, что вам нужен положительный квадратный корень из чего-то, если вы явно не укажете иное. Квадратный корень из четырех на самом деле равен двум. Если хочешь отрицательный ответ, поставьте знак минус впереди. Если вы хотите и то, и другое, поставьте знак плюс или минус. Без этого соглашения было бы невозможно писать уравнения; вы никогда не узнаете, что задумал этот человек, даже если бы он поставил знак впереди (потому что это может быть отрицательное значение отрицательного квадратного корня, например). Кроме того, как именно вы бы написали какой-либо компьютерный код, связанный с математикой, если бы операторы начали возвращать два значения? Это сломало бы все.

Прискорбное исключение из этого соглашения - решение для переменных. В следующем уравнении:

x ^ 2 = 4

У вас нет другого выбора, кроме как рассмотреть оба возможных значения для X. если вы извлечете квадратный корень из обеих частей, вы получите x = 2, но теперь вы должны ввести знак плюс или минус, чтобы убедиться, что вы не пропустите ни одного возможного решения. Также помните, что в этом случае это '

8
ответ дан 30 November 2019 в 23:47
поделиться

Если метод извлечения квадратного корня вернул два значения, то одно из этих двух практически всегда было бы отброшено. Помимо траты памяти и сложности на дополнительное возвращаемое значение, это будет мало использоваться. Всем известно, что вы можете умножить ответ, возвращенный -1 , и получить другой корень.

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

17
ответ дан 30 November 2019 в 23:47
поделиться

Some thoughts:

  • Historically, functions were defined as procedures which returned a single value.

  • It would have been fiddly (using primitive programming constructs) to define a clean function which returned multiple values like this.

  • There are always exceptions to the rule:

    • 0 for example only has a single root (0).
    • You cannot take the square root of a negative number (unless the language supports complex numbers). This could be treated as an exception (like "divide by 0") in languages which don't support imaginary numbers or the complex number system.
  • It is usually simple to deduce the 2 square roots (simply negate the value returned by the function). This was probably left as an exercise by the caller of the sqrt() function, if their domain depended on dealing with both the positive (+) and negative (-) roots.

12
ответ дан 30 November 2019 в 23:47
поделиться

Потому что большинство программистов хотят только одного ответа

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


Однако в настоящее время на многих языках легко вернуть два значения. В JavaScript:

var sqrts=function(x) {
  var s=Math.sqrt(x);
  if (s>0) {
    return [s,-s];
  } else {
    return [0];
  }
}

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

>sqrts(2)
[1.4142135623730951, -1.4142135623730951]
3
ответ дан 30 November 2019 в 23:47
поделиться

Есть много функций, которые возвращают только 1 ответ из 2 или более вариантов. Например, арктангенс. Арктангенс 1 возвращается как 45 градусов, но также может быть 225 или даже 405. Как и во многих вещах в жизни и программировании, есть условность, которую мы знаем и на которую можем положиться. Одна из них - функции извлечения квадратного корня, возвращающие положительные значения. Мы, программисты, должны помнить, что есть другие решения, и при необходимости действовать в соответствии с ними в коде.

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

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

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

9
ответ дан 30 November 2019 в 23:47
поделиться

Потому что исторически она определялась как функция, которая дает длину стороны квадрата известной поверхности. И длина в этом контексте положительна.

2
ответ дан 30 November 2019 в 23:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: