Programming languages 为什么大多数编程语言对4的平方根只给出一个答案?

Programming languages 为什么大多数编程语言对4的平方根只给出一个答案?,programming-languages,history,return-value,sqrt,square-root,Programming Languages,History,Return Value,Sqrt,Square Root,大多数编程语言将2作为4的平方根。但是,有两个答案:2和-2。有没有什么特别的原因,历史或其他原因,为什么通常只给出一个答案 您总是可以知道另一个数字是什么,因此可能不必同时返回这两个数字。因为实现多个返回类型很麻烦。如果您确实需要另一个结果,将结果乘以-1是否足够简单?返回一个数字比返回两个数字更容易。大多数工程决策都是以这种方式做出的。因为: 在数学方面,√除非另有规定,x通常指x[]的主(即正)根 有些语言不能返回多个值 因为您可以只应用否定,所以返回这两个将是多余的 一些想法: 历史

大多数编程语言将
2
作为
4
的平方根。但是,有两个答案:
2
-2
。有没有什么特别的原因,历史或其他原因,为什么通常只给出一个答案

您总是可以知道另一个数字是什么,因此可能不必同时返回这两个数字。

因为实现多个返回类型很麻烦。如果您确实需要另一个结果,将结果乘以-1是否足够简单?

返回一个数字比返回两个数字更容易。大多数工程决策都是以这种方式做出的。

因为:

  • 在数学方面,√除非另有规定,x通常指x[]的主(即正)根
  • 有些语言不能返回多个值
  • 因为您可以只应用否定,所以返回这两个将是多余的
    • 一些想法:

      • 历史上,函数被定义为返回单个值的过程

      • 要定义一个干净的函数,返回多个类似这样的值,是很麻烦的(使用原语编程结构)

      • 该规则始终存在例外情况:

        • 例如,0只有一个根(0)
        • 不能取负数的平方根(除非该语言支持复数)。在不支持虚数或复数系统的语言中,这可能被视为例外(如“除以0”)
      • 推导2个平方根通常很简单(简单地对函数返回的值求反)。如果sqrt()函数的域依赖于处理正(+)和负(-)根,则这可能是sqrt()函数调用方的练习


      如果平方根方法返回两个值,那么这两个值中的一个实际上总是会被丢弃。除了在额外的返回值上浪费内存和复杂性之外,它几乎没有什么用处。每个人都知道,您可以将
      -1
      返回的答案乘以另一个根


      我预计只有数学语言在这里会返回多个值,可能是作为数组或矩阵。但对于大多数通用编程语言,按照您的建议执行操作的收益可以忽略不计,成本也不可忽略。

      在数学中,按照惯例,总是假定您想要某个非整数的正平方根如果你明确地说不是。四的平方根实际上是二。如果你想要否定的答案,在前面放一个否定的符号。如果你想要两者,在前面放一个加号或减号。没有这个惯例,就不可能写出方程;即使他们在前面放了一个符号,你也永远不会知道他们想要什么(因为它可能是负平方根的负数)。此外,如果运算符开始返回两个值,你将如何编写任何涉及数学的计算机代码?这将破坏一切

      这种惯例的不幸例外是在求解变量时。在以下等式中:

      x^2=4


      你除了考虑X的两个可能值之外别无选择。如果你取两边的平方根,你得到x=2,但是现在你必须加上正负号,以确保你没有丢失任何可能的解决方案。而且,记住,在这种情况下,技术上X可以是正负的,而不是四的平方根。< /P> < P>这可能是因为当人们使用计算器计算平方根时,他们只需要正值

      再往前走一步,问问为什么你的计算器不允许你取负数的平方根。这是可能的,使用虚数,但一般用户对此完全没有用处


      我认为,因为函数名为“sqrt”,如果需要多个根,则必须调用函数“sqrt”,因为它不存在,所以无法执行


      更严肃的回答是,你建议的是一个更大问题的具体实例。许多方程,通常是反函数(包括sqrt)有多种可能的解决方案,如arcsin等,这些通常都是一个问题。例如,使用arcsin时,是否应该返回无限多个答案?例如,请参阅有关的讨论。

      ,因为大多数程序员只需要一个答案

      如果调用方需要,从正值生成负值是很容易的。对于大多数代码,调用方只使用正值


      但是,现在在许多语言中都很容易返回两个值。在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]
      

      有许多函数只能从2个或多个可能性中返回1个答案。例如,反正切。1的反正切返回为45度,但也可以是225度甚至405度。与生活和编程中的许多事情一样,我们知道并可以依赖一种约定。平方根函数返回正值就是其中之一。I这取决于我们,程序员,记住还有其他的解决方案,如果需要的话,在代码中采取行动


      顺便说一句,这是机器人学在处理运动学和逆运动学方程时的一个常见问题,其中有多个对应于笛卡尔位置的连杆位置的解。

      ,因为它是历史上定义的{{引文需要}作为给出已知曲面正方形边长的函数。在这种情况下,长度是正的。

      我不这么认为!在数学中,方程f(x)=sqrt(x)的解是x=+/-2。它完全取决于你选择的域(自然数、整数、实数等)。因为程序允许-ve个数,所以数学将