为什么大多数的编程语言只得到一个答案的平方根4吗?
-
10-07-2019 - |
题
最编程语言得到 2
作为回答的平方根 4
.然而,有两个答案: 2
和 -2
.是否有任何特别的原因、历史或其他方式,为什么只有一个答案通常是吗?
解决方案
因为:
- 在数学、√x 通常,除非另有规定,指的是主要的(即正的)根 x [http://mathworld.wolfram.com/SquareRoot.html].
- 一些语言没有能力返回多于一个价值。
- 因为你可以申请的否定,返回这两个是多余的。
其他提示
如果平方根方法返回两个值,则实际上总是丢弃这两个中的一个。除了浪费内存和额外返回值的复杂性之外,它几乎没有用过。每个人都知道你可以将-1
返回的答案多出来并获得另一个根。
我希望只有数学语言会在这里返回多个值,可能是数组或矩阵。但对于大多数通用编程语言而言,按照您的建议,可以获得微不足道的收益和不可忽视的成本。
一些想法:
从历史上看,功能定义作程序,返回一个 单个的价值.
这将是繁琐的(使用原始编程结构)来定义的一个清洁的功能返回 多个值 这样的。
总是有 例外情况 为本规则:
- 0例如只有一个 单 根(0).
- 你不能采取的平方根 负数 (除非语言支持复杂的数字)。这可能被视为例外(如"除0"),在语言,它不支持虚构数字或复杂的数字系统。
它通常被简单的 推断 2平方根(简单地否定价值返回的功能)。这可能是左作为一个运动,通过呼叫者的sqrt()功能,如果他们的 域 取决于处理这两个积极的(+)和负面的(-)根源。
返回一个数字比返回两个数字更容易。大多数工程决策都是以这种方式做出的。
有许多功能只能从2种或更多种可能性中返回1个答案。例如,反正切。 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 <!>”;如果你想要多个根,你必须调用函数<!> quot; sqrts <!> quot;不存在,所以你不能这样做。
更严重的答案是,您建议更大问题的特定实例。许多方程式和通常的反函数(包括sqrt)具有多种可能的解决方案,例如arcsin等,并且这些通常是一个问题。例如,使用arcsin,应该返回无限数量的答案吗?例如,请参阅有关分支机构削减的讨论。
因为它在历史上被定义为{{citation needed}}作为给出已知表面的正方形的边长的函数。在这种情况下,长度是正面的。
你可以随时告诉另一个号码是什么,所以也许没有必要同时返回它们。