为什么macOS和iOS计算器中的0 ^ 0在不同版本上给出不同的结果?


17

我已经在不同版本的计算器中检查了0 ^ 0的结果:

  • iOS 10.3 => 1
  • iOS 11.4 =>错误
  • macOS 10.12.6 => 1
  • macOS 10.13.5 =>不是数字

差异的原因是什么?


22
然后,我不得不坚持上高山脉,因为我爱吃NaN面包;
铁通津


news.ycombinator.com/item?id=8502968 <(苹果停止出版自己的数学库的libm版本)
穿上鲜艳

3
您是要让自己理解数学,还是要让Apple多次更改其对0 ^ 0的解释?如果是前者,则会发布一个可接受的答案;如果是后者,则不一定是负责任的。
zr00

在版本10.11.6中,结果为1
Robert Kowal

Answers:


20

虽然通常不定义0⁰,但是某些数学分支确实其明确定义为1,因为如您所见,这是函数y(x)=xˣ在n = 0处收敛的值。

非正式地讲,请注意0.5 0.5 = 0.707…;0.2 0.2 = 0.725…; 0.1 0.1 = 0.794…和0.01 0.01 = 0.955…。当您接近0时,结果将接近1,这使得在某些情况下 0 ^ 0 定义为1 非常合逻辑且方便。

因此,这三个结果中的任何一个本质上都不是错误的,相反,它们都反映了此未定义表达式的值的不同约定。

维基百科上有一篇很好的文章对此问题进行了解释。另请参见从零到零功率–是0⁰= 1?


4
您的意思是x = 0,而不是n = 0。
罗斯兰

2
我从未遇到过设置0 ^ 0 = 1的特定理由。毕竟,x ^ y没有(x,y)→(0,0)的限制。但是,如果您以∑ c_n x ^ n的形式编写一般多项式,其中n的总和范围为0到n(多项式的次数),则必不可少的是0 ^ 0 = 1,否则“恒定”这个词毕竟不是那么恒定。另请参阅此处。
哈拉德·汉彻·奥尔森

@ HaraldHanche-Olsen这是一个非常有见地的观点,请考虑编写答案,或者随时编辑我的答案。我的直觉是基于这样一个事实,即大多数形式为e ^ {αx^β* ln ^ {ξx^γ+μ}}的函数将收敛到1(除了β= 0以及其他一些边缘情况),在工程应用程序中经常会遇到这种情况,即人们可能会使用计算器应用程序的那种东西,但是我知道这有些牵强。
Undercat支持Monica

3
尽管此答案很好地解释了0 ^ 0被定义为/可以定义为0 ^ 0的原因,但是它并不能解释为什么Apple几次更改了它们的解释。
zr00

1
@DawoodibnKareem我在上面的评论,更重要的是,在math.se上引用的问题,应该解释为什么让0 ^ 0为1可能有用。当然,这样的约定是有代价的:表达式x ^ y在(0,0)不连续。
哈拉德·汉彻·奥尔森

13

浮点算术的大多数实现都遵循IEEE 754-2008标准,该标准指定pow(0,0)返回1(请参见第9.2.1节)。

但是它还定义了其他两个函数:pown(0,0)= 1和powr(0,0)= NaN。

维基百科总结如下

大多数浮点库的设计中都使用了IEEE 754-2008浮点标准。它建议了一些用于计算幂的运算:[20]

pow将0 0视为1。如果幂是正整数,则结果与pown相同,否则,结果与powr相同(某些例外情况除外)。

pown将0 0视为1。幂必须是一个精确的整数。该值是针对负基数定义的;例如pown(-3,5)是-243。powr将0 0视为NaN(非数字-未定义)。对于像powr(-3,2)这样的基数小于零的情况,该值也是NaN。该值由epower×log(base)定义。

pow变种的灵感来自C99的pow功能,主要是为了兼容性。[21] 它主要用于具有单个幂函数的语言。由于幂函数的用法冲突和观点不同(如上所述),引入了pown和powr变体。[22]

当然,这与正确的数学结果无关。正如其他人所指出的,答案不只一个,而且IEEE必须做出任意决定。


5

苹果公司的某人发现0 ^ 0是无效操作,并将其修复。


5

零到零的幂是一个矛盾

  • 0任意数字等于0
  • 0的任何数字是1

应该产生一个错误。您没有看到正在生成错误的唯一原因是由于相关计算器的版本没有捕获该输入错误。


9
(很生疏业余)数学家想争辩说,0极限^ x为0为x接近0,极限X ^ x是1为x接近,因此0你有一个不连续性这是不确定的非常定义和很
高兴

1
温暖我的声音 -烤热绵羊用谢泼德做结石问题的图像,@ bmike :-D
艾伦(Allan)

2
@MrLister“由某些作者定义而未由其他作者定义” 正是数学的工作方式。在几乎所有情况下,0 ^ 0 = 1是正确的定义(例如,它是从空集到空集的函数数)。x ^ y不能连续扩展到原点的事实是不幸的,这是一些分析教育者更喜欢不加定义以防止混淆的原因,但是即使他们必须达到0 ^ 0 = 1电源系列。
Eike Schulte '18

3
@bmike无需限制。仅仅因为x ^ y(0,0)处是不连续的,并不意味着您不能将值分配给0 ^ 0
Dennis,

3
0 ^ 0 = 1绝对不是矛盾。0 ^ 0是一个空乘积,因此为1。0 ^ 0是从空集到空集的函数集基数,并且恰好有一个这样的函数多项式是必需的。清单继续。
user76284

4

关于0⁰存在一些争议,归结为功能x ^ y在(x,y)->(0,0)不连续。这是半争论的,因为禁止具有不连续值的函数在数学上是胡说八道。

通常的做法是将整数嵌入到实数中,以便在实数函数采用整数值时,在实数上定义的函数与在整数上定义的相同函数匹配。因此,将0.0 ^ 0与0.0 ^ 0.0区分开是没有意义的。

现在,以整数0为指数的x⁰是一个恰好包含零个x因子的乘积。由于x的值中不包含x的因子,因此根据x为其分配值几乎没有意义,并且其作为空乘积的值很明显为1,这是乘法的中性元素。

这也很有意义,因为它不会将二项式定理任意地限制为非零值。从某种意义上说,这是一个基于试图在x = 0处合理地完成函数x⁰的论据,从而使该函数在所有地方都定义并连续。

如果我们改用函数0 ^ x尝试此操作,则x = 0 +处的极限可能为0,但由于未为负x定义该函数,因此将其定义为仍无法解决基本的不连续性。

现在,计算器倾向于将x ^ y计算为exp(y * ln(x))。当然,对于x = 0来说这是个坏消息。因此,必须明确地编程这些值,否则您将得到一个非数字。对于显式编程,您必须依靠程序员的数学直觉,并且与数学家相比,典型的程序员将更受伪数学直觉的指导,例如“定义时函数必须是连续的”。

此外,您可能会期望来自不同用户的大量评论,并且纯数学家不会因为他们对数学真相的看法而完全依赖计算器,因此您不能期望他们的输入会淹没其他人的输入。

因此,结果是民主的结果远胜于数学的结果,而且民主多数派倾向于改变。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.