Почему большинство языков программирования дают только один ответ на квадратный корень из 4?
Большинство языков программирования дают 2
как ответ на квадратный корень из 4
. Однако есть два ответа: 2
и -2
. Есть ли какая-то конкретная причина, историческая или иная, почему обычно дается только один ответ?
Ответы
Ответ 1
Потому что:
- В математике √ x обычно, если не указано иное, ссылается на основной (то есть положительный) корень x [http://mathworld.wolfram.com/SquareRoot.html].
- Некоторые языки не могут возвращать более одного значения.
- Поскольку вы можете просто применить отрицание, возврат обоих будет лишним.
Ответ 2
Если метод квадратного корня возвратил два значения, то один из этих двух практически всегда будет отброшен. В дополнение к трате памяти и сложности на добавочное возвращаемое значение, он будет мало использован. Всем известно, что вы можете повторно ответить на ответ -1
и получить другой корень.
Я ожидаю, что только математические языки вернут здесь несколько значений, возможно, в виде массива или матрицы. Но для большинства языков программирования общего назначения существует незначительная прибыль и невыносимая стоимость, как вы полагаете.
Ответ 3
Некоторые мысли:
-
Исторически функции определялись как процедуры, которые возвращали одно значение.
-
Было бы сложно (используя примитивные программирующие конструкции) определить чистую функцию, которая вернула бы несколько значений вроде этого.
-
В правиле всегда есть исключения:
- 0, например, имеет только один корень (0).
- Вы не можете взять квадратный корень из отрицательного числа (если язык не поддерживает сложные числа). Это можно рассматривать как исключение (например, "делить на 0" ) на языках, которые не поддерживают мнимые числа или систему комплексных чисел.
-
Обычно бывает просто вывести 2 квадратных корня (просто отрицайте значение, возвращаемое функцией). Это, вероятно, оставило в качестве упражнения вызывающей функцией sqrt(), если их домен зависел от отношения как к положительным (+), так и к отрицательным (-) корням.
Ответ 4
Легче вернуть одно число, чем вернуть два. Большинство технических решений принимаются таким образом.
Ответ 5
Есть много функций, которые возвращают только 1 ответ от 2 или более возможностей. Например, касание дуги. Тангенс дуги в 1 возвращается как 45 градусов, но может также быть 225 или даже 405. Как и во многих вещах в жизни и программировании, существует соглашение, которое мы знаем и можем положиться. Функция квадратного корня возвращает положительные значения. Мы должны, программисты, иметь в виду, что есть другие решения и действовать на них, если это необходимо в коде.
Кстати, это распространенная проблема в робототехнике при работе с кинематикой и обратными кинематическими уравнениями, где имеется множество решений позиций ссылок, соответствующих декартовым позициям.
Ответ 6
В математике, по соглашению, всегда предполагалось, что вы хотите получить положительный квадратный корень чего-то, если вы прямо не заявите об этом иначе. Квадратный корень из четырех действительно два. Если вы хотите отрицательный ответ, поставьте отрицательный знак впереди. Если вы хотите оба, поставьте знак "плюс-минус". Без этого соглашения было бы невозможно написать уравнения; вы никогда не узнаете, что задумал человек, даже если они поставили знак впереди (например, это может быть отрицательный отрицательный квадратный корень). Кроме того, как именно вы могли бы написать какой-либо компьютерный код с математикой, если бы операторы начали возвращать два значения? Это сломает все.
Несчастным исключением из этого соглашения является решение для переменных. В следующем уравнении:
x ^ 2 = 4
У вас нет выбора, кроме как рассмотреть оба возможных значения для X. Если вы возьмете квадратный корень с обеих сторон, вы получите x = 2, но теперь вы должны поместить знак плюса или минуса, чтобы убедиться, что вы не пропустите любые возможные решения. Кроме того, помните, что в этом случае это технически X, который может быть либо плюсом, либо минусом, а не квадратным корнем из четырех.
Ответ 7
Потому что многократные типы возвратов раздражают для реализации. Если вам действительно нужен другой результат, нелегко ли вам просто умножить результат на -1?
Ответ 8
Потому что большинству программистов нужен только один ответ.
Достаточно легко создать отрицательное значение из положительного значения, если он хочет его. Для большинства кодов вызывающий абонент использует только положительное значение.
Однако в настоящее время легко возвращать два значения на многих языках. В 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]
Ответ 9
Я думаю, потому что функция называется "sqrt", и если вам нужны несколько корней, вам придется вызывать функцию "sqrts", которой не существует, поэтому вы не можете этого сделать.
Более серьезным ответом является то, что вы предлагаете конкретный экземпляр более крупной проблемы. Многие уравнения и обычно обратные функции (включая sqrt) имеют несколько возможных решений, таких как arcsin и т.д., И это, в общем, проблема. Например, с arcsin следует возвращать бесконечное количество ответов? См., Например, обсуждения сокращения ветвей.
Ответ 10
Потому что это исторически определялось как функция, которая дает боковую длину квадрата известной поверхности. И длина положительна в этом контексте.
Ответ 11
вы всегда можете указать, что такое другой номер, так что, возможно, не обязательно возвращать оба из них.
Ответ 12
Вероятно, потому что, когда люди используют калькулятор для вычисления квадратного корня, они хотят только положительное значение.
Перейдите еще на один шаг и спросите, почему ваш калькулятор не позволит вам взять квадратный корень из отрицательного числа. Это возможно, используя мнимые числа, но средний пользователь имеет абсолютно нулевое значение для этого.
О мнимых числах.