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

bug*_*net 15 history programming-languages return-value sqrt square-root

大多数编程语言都给出2了平方根的答案4.但是,有两个答案:2-2.是否有任何特殊原因,历史或其他原因,为什么通常只给出一个答案?

Nie*_*jou 37

因为:

  • 在数学上,√ X的常见的是,除非另有说明,指的是主要(即,正)根X [ http://mathworld.wolfram.com/SquareRoot.html] .
  • 某些语言无法返回多个值.
  • 既然你可以只应用否定,那么返回两者都是多余的.

  • Pax,你没有看到提供的参考?去那里阅读漂亮彩虹上面段落中的倒数第二句. (12认同)
  • 我读了它,sgm,但我也做了大学水平的数学,我仍然与州立大学的数学家密切相关.链接说"通常使用,......".那不是你说的("在数学中").数学家属于他们自己的世界,他们很可能会因为这个评论而焚烧你们:-) (12认同)
  • 我不这么认为!在数学中,方程f(x)= sqrt(x)的解是x = +/- 2.它完全取决于您选择的域(自然数,整数,实数等).由于程序允许-ve数字,数学将决定他们返回两个解决方案.它的实用主义限制了编程语言(尽管Python总能返回一个元组). (5认同)

Edd*_*die 17

如果平方根方法返回两个值,则实际上总是丢弃这两个中的一个.除了浪费内存和额外返回值的复杂性之外,它几乎没有用过.每个人都知道你可以多次返回-1并获得另一个根.

我希望只有数学语言会在这里返回多个值,可能是数组或矩阵.但是对于大多数通用编程语言而言,如您所建议的那样,获得的成本可以忽略不计并且成本不可忽略.


Leo*_*Hat 12

一些想法:

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

  • 使用原始编程构造来定义一个返回多个这样的值的clean函数本来是很繁琐的.

  • 规则总是有例外:

    • 0例如仅具有单个根(0).
    • 你不能取负数的平方根(除非语言支持复数).这可以被视为不支持虚数或复数系统的语言中的异常(如"除以0").
  • 推导 2平方根通常很简单(简单地否定函数返回的值).如果他们的依赖于处理正(+)和负( - )根,那么这可能是由sqrt()函数的调用者留下的练习.

  • 对于不是虚构的数字我有足够的麻烦 (2认同)

i_a*_*orf 10

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


Jim*_*m C 9

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

顺便说一下,当处理运动学和逆运动学方程时,这是机器人技术中的常见问题,其中存在对应于笛卡尔位置的多个链接位置解.


Phi*_*oum 8

在数学中,按照惯例,除非你明确另有说明,否则总是假设你想要某个正方根.四个方根真的是两个.如果你想要否定答案,请在前面加上一个负号.如果你想要两者,请加上加号或减号.没有这个惯例,就不可能写出方程式; 你永远不会知道这个人的意图,即使他们确实在前面放了一个标志(例如,因为它可能是负平方根的负面).另外,如果操作员开始返回两个值,你究竟会如何编写任何涉及数学的计算机代码?它会破坏一切.

这个约定的不幸例外是求解变量.在以下等式中:

x ^ 2 = 4

你别无选择,只能考虑X的两个可能值.如果你取两边的平方根,你得到x = 2,但现在你必须加上加号或减号以确保你没有遗漏任何可能的解决方案.另外,请记住,在这种情况下,技术上X可以是正或负,而不是四的平方根.

  • "在数学中,按照惯例,你总是假设你想要一些积极的平方根,除非你明确地另有说法" - 抱歉,这是100%不正确的. (2认同)

Unk*_*own 5

因为多种返回类型很难实现.如果你真的需要其他结果,那么将结果乘以-1会不是很容易?