20

我在代码中进行的计算中遇到了这个问题,如果除数也为 0,则除数为 0。在我的代码中,我为这种情况返回 0。我想知道,虽然除以零通常是未定义的,为什么不为这种情况破例呢?我的理解为什么除以零是不确定的,基本上是它不能被逆转。但是,我在 0/0 的情况下没有看到这个问题。

编辑好的,所以这个问题引发了很多讨论。我犯了一个错误,即基于它获得了很多选票这一事实而过分急切地接受了一个答案。我现在接受了AakashM 的回答,因为它提供了一个关于如何分析问题的想法。

4

18 回答 18

76

比方说:

0/0 = x

现在,重新排列方程(两边都乘以 0)给出:

x * 0 = 0

现在你看到问题了吗?x 有无数个值,因为任何乘以 0 都是 0。

于 2010-07-13T11:09:39.237 回答
58

这是数学而不是编程,但简要地说:

  • 从某种意义上说,将正无穷大的“值”分配给 是合理的some-strictly-positive-quantity / 0,因为限制是明确定义的

  • 但是,x / yasxy两者都趋于零的极限取决于它们所走的路径。例如,lim (x -> 0) 2x / x显然是 2,而lim (x -> 0) x / 5x显然是 1/5。极限的数学定义要求它是相同的,无论遵循什么路径到达极限。

于 2010-07-13T11:11:43.770 回答
19

(受到托尼·布雷亚尔(Tony Breyal)相当不错的回答的启发,我自己发布了一个)

零是一个狡猾而微妙的野兽——它不符合我们所知道的通常的代数定律。

零除以任何数字(零本身除外)是零。更数学地说:

 0/n = 0      for all non-zero numbers n.

当您尝试除以零本身时,您会进入棘手的领域。一个数字除以 0 总是未定义的,这是不正确的。这取决于问题。我将给你一个微积分的例子,其中定义了数字 0/0 。

假设我们有两个函数,f(x) 和 g(x)。如果你取它们的商 f(x)/g(x),你会得到另一个函数。我们称其为 h(x)。

您还可以限制功能。例如,当 x 变为 2 时,函数 f(x) 的极限是函数在 x 接近 2 时最接近的值。我们将此极限写为:

 lim{x->2} f(x) 

这是一个非常直观的概念。只需画出你的函数图,然后沿着它移动你的铅笔。随着 x 值接近 2,请查看函数的去向。

现在以我们的例子为例。让:

 f(x) = 2x - 2
 g(x) = x - 1

并考虑他们的商:

 h(x) = f(x)/g(x)

如果我们想要 lim{x->1} h(x) 怎么办?有定理说

 lim{x->1} h(x) = lim{x->1} f(x) / g(x) 
                = (lim{x->1} f(x)) / (lim{x->1} g(x))  
                = (lim{x->1} 2x-2) / (lim{x->1} x-1)
                =~ [2*(1) - 2] / [(1) - 1]  # informally speaking...
                = 0 / 0 
                  (!!!)

所以我们现在有:

 lim{x->1} h(x) = 0/0

但是我可以使用另一个定理,称为l'Hopital 规则,它告诉我这个限制也等于 2。所以在这种情况下,0/0 = 2(我不是告诉过你这是一只奇怪的野兽吗?)

这是 0 的另一个奇怪之处。假设 0/0 遵循古老的代数规则,即任何东西除以自身都是 1。那么你可以做以下证明:

我们得到:

 0/0 = 1

现在将两边乘以任意数 n。

 n * (0/0) = n * 1

简化两边:

 (n*0)/0 = n 
 (0/0) = n 

同样,使用 0/0 = 1 的假设:

 1 = n 

所以我们只是证明了所有其他数字 n 都等于 1!所以 0/0 不能等于 1。

在 mathoverflow.com 上走回她的家

于 2010-07-14T09:09:59.630 回答
5

这是一个完整的解释:

http://en.wikipedia.org/wiki/Division_by_zero

(包括证明 1 = 2 :-))

您通常在编程中使用 if 语句来处理此问题,以获得应用程序所需的行为。

于 2010-07-13T11:11:14.410 回答
4

问题在于分母。分子实际上是无关紧要的。

10 / n
10 / 1 = 10
10 / 0.1 = 100
10 / 0.001 = 1,000
10 / 0.0001 = 10,000
Therefore: 10 / 0 = infinity (in the limit as n reaches 0)

模式是随着 n 变小,结果会变大。在 n = 0 时,结果是无穷大,这是一个不稳定或非固定点。你不能把无穷写成一个数字,因为它不是,它是一个不断增加的数字的概念。

否则,您可以使用对数定律在数学上考虑它,从而将除法从等式中剔除:

    log(0/0) = log(0) - log(0)

    log(0) = -infinity

同样,问题是结果未定义,因为它是一个概念,而不是您可以输入的数字。

说了这么多,如果你对如何将不确定的形式变成确定的形式感兴趣,请查看 l'Hopital 的规则,它有效地表示:

f(x) / g(x) = f'(x) / g'(x)

假设存在限制,因此您可以获得一个固定点而不是不稳定点的结果。

希望有点帮助,

托尼·布雷亚尔

使用对数规则的 PS 通常是解决执行操作问题的一种很好的计算方法,这些操作会导致数字非常小,以至于在机器​​浮点值的精度下,与零无法区分。实际的编程示例是“最大似然”,通常必须使用日志以保持解决方案稳定

于 2010-07-13T11:57:22.120 回答
3

反过来看除法:如果 a/b = c 那么 c*b = a。现在,如果你替换 a=b=0,你最终会得到 c*0 = 0。但是任何乘以零等于零,所以结果可以是任何值。您希望 0/0 为 0,其他人可能希望它为 1(例如,当 x 接近 0 时 sin(x)/x 的极限值为 1)。所以最好的解决办法就是不定义,报错。

于 2010-07-13T11:09:50.997 回答
2

现代数学的结构是由根据公理思考的数学家设定的。拥有额外的公理是无效的,并且实际上不允许人们做更多的事情,这与拥有清晰数学的理想背道而驰。

于 2010-07-13T11:17:46.360 回答
2

您可能想看看James Anderson 博士在 Transarithmetic 方面的工作。它没有被广泛接受。

Transarithmetic 引入术语/数字“Nullity”以取值 0/0,James 将其比作引入“i”和“j”。

于 2011-03-10T10:07:03.333 回答
1

0进入0多少次?5. 是 - 5 * 0 = 0, 11. 是 - 11 * 0 = 0, 43. 是 - 43 * 0 = 0。也许你可以明白为什么它现在是未定义的了?:)

于 2010-07-13T11:10:55.223 回答
1

既然x/y=z应该等价于x=yz,并且 anyz会满足0=0z,那么这样的“例外”会有多大用处?

于 2010-07-13T11:11:15.330 回答
1

为什么未定义的另一种解释0/0是您可以编写:

0/0 = (4 - 4)/0 = 4/0 - 4/0

并且4/0是未定义的。

于 2010-07-13T12:34:48.143 回答
0

如果 a/b = c,则 a = b * c。在 a=0 和 b=0 的情况下,c 可以是任何值,因为 0 * c = 0 对于 c 的所有可能值都为真。因此,0/0 未定义。

于 2010-07-13T11:11:18.810 回答
0

这只是一个逻辑答案而不是数学答案,想象零是空的,你怎么能将一个空除以一个空这是除以零的情况,你怎么能除以一个空的东西。

于 2011-04-23T18:41:16.597 回答
0

0 表示什么都没有,所以如果你什么都没有,它并不意味着分配给任何东西。一些公交设施在列出特定线路的行程次数时,行程编号 0 通常是以不同方式路由的特殊路线。通常,一个很好的例子是在托伦斯公交系统中,其中 2 号线在第一次行程之前有一个行程,称为行程编号 0,仅在工作日运行,该行程特别是行程编号 0,因为它是一条专门的路线与所有其他路线不同。

有关详细信息,请参阅以下网页: http://transit.torrnet.com/PDF/Line-2_MAP.pdf http://transit.torrnet.com/PDF/Line-2_Time_PDF.pdf

在地图上,行程编号 0 是用虚线表示的行程,实线表示常规路线。

有时 0 可用于对路线进行的行程编号,该路线被视为“快速服务”路线。

于 2012-10-03T07:51:07.577 回答
-1

为什么不对这种情况破例呢?

因为:

  • 正如其他人所说,这并不容易;)
  • 没有定义 0/0 的应用程序 - 添加异常会使数学复杂化而没有收益。
于 2010-07-13T11:35:36.797 回答
-1

这就是我要做的:

function div(a, b) {
    if(b === 0 && a !== 0) {
        return undefined;
    }
    if(b === 0 && a === 0) {
        return Math.random;
    }
    return a/b;
}
于 2010-07-23T06:39:39.667 回答
-1

当您输入零除以零时,会出现错误,因为无论您将零乘以什么,都将是零,因此它可以是任何数字。

于 2016-03-09T18:49:05.520 回答
-7

正如 Andrzej Doyle 所说:

任何被零潜水的东西都是无穷大的。0/0 也是无穷大。你不能得到 0/0 = 1。这是数学的基本原理。整个世界就是这样运转的。但是你可以肯定地编辑一个程序说“0/0 是不可能的”或“不能被零除”,就像他们在手机中所说的那样。

于 2010-07-13T11:43:46.980 回答