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

StackOverflow https://stackoverflow.com/questions/838214

Вопрос

Большинство языков программирования дают 2 как ответ на квадратный корень из 4.Однако есть два ответа: 2 и -2.Есть ли какая-то конкретная причина, историческая или иная, почему обычно дается только один ответ?

Это было полезно?

Решение

Потому что:

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

Другие советы

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

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

Некоторые мысли:

  • Исторически функции определялись как процедуры, возвращающие одно значение.

  • Было бы затруднительно (с использованием примитивных программных конструкций) определить чистую функцию, возвращающую несколько значений так.

  • Всегда есть исключения к правилу:

    • 0, например, имеет только одинокий корень (0).
    • Вы не можете извлечь квадратный корень из отрицательное число (если язык не поддерживает комплексные числа).Это можно рассматривать как исключение (например, «деление на 0») в языках, которые не поддерживают мнимые числа или комплексную систему счисления.
  • Обычно это просто сделать вывод 2 квадратных корня (просто инвертируют значение, возвращаемое функцией).Вероятно, это оставил в качестве упражнения вызывающий функцию sqrt(), если их домен зависело от работы как с положительными (+), так и с отрицательными (-) корнями.

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

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

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

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

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

x ^ 2 = 4

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

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

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

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

<Ч>

Однако в настоящее время легко вернуть два значения во многих языках. В 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]

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top