我在代码中进行的计算中遇到了这个问题,如果除数也为 0,则除数为 0。在我的代码中,我为这种情况返回 0。我想知道,虽然除以零通常是未定义的,为什么不为这种情况破例呢?我的理解为什么除以零是不确定的,基本上是它不能被逆转。但是,我在 0/0 的情况下没有看到这个问题。
编辑好的,所以这个问题引发了很多讨论。我犯了一个错误,即基于它获得了很多选票这一事实而过分急切地接受了一个答案。我现在接受了AakashM 的回答,因为它提供了一个关于如何分析问题的想法。
我在代码中进行的计算中遇到了这个问题,如果除数也为 0,则除数为 0。在我的代码中,我为这种情况返回 0。我想知道,虽然除以零通常是未定义的,为什么不为这种情况破例呢?我的理解为什么除以零是不确定的,基本上是它不能被逆转。但是,我在 0/0 的情况下没有看到这个问题。
编辑好的,所以这个问题引发了很多讨论。我犯了一个错误,即基于它获得了很多选票这一事实而过分急切地接受了一个答案。我现在接受了AakashM 的回答,因为它提供了一个关于如何分析问题的想法。
比方说:
0/0 = x
现在,重新排列方程(两边都乘以 0)给出:
x * 0 = 0
现在你看到问题了吗?x 有无数个值,因为任何乘以 0 都是 0。
这是数学而不是编程,但简要地说:
从某种意义上说,将正无穷大的“值”分配给 是合理的some-strictly-positive-quantity / 0
,因为限制是明确定义的
但是,x / y
asx
和y
两者都趋于零的极限取决于它们所走的路径。例如,lim (x -> 0) 2x / x
显然是 2,而lim (x -> 0) x / 5x
显然是 1/5。极限的数学定义要求它是相同的,无论遵循什么路径到达极限。
(受到托尼·布雷亚尔(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 上走回她的家
这是一个完整的解释:
http://en.wikipedia.org/wiki/Division_by_zero
(包括证明 1 = 2 :-))
您通常在编程中使用 if 语句来处理此问题,以获得应用程序所需的行为。
问题在于分母。分子实际上是无关紧要的。
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 通常是解决执行操作问题的一种很好的计算方法,这些操作会导致数字非常小,以至于在机器浮点值的精度下,与零无法区分。实际的编程示例是“最大似然”,通常必须使用日志以保持解决方案稳定
反过来看除法:如果 a/b = c 那么 c*b = a。现在,如果你替换 a=b=0,你最终会得到 c*0 = 0。但是任何乘以零等于零,所以结果可以是任何值。您希望 0/0 为 0,其他人可能希望它为 1(例如,当 x 接近 0 时 sin(x)/x 的极限值为 1)。所以最好的解决办法就是不定义,报错。
现代数学的结构是由根据公理思考的数学家设定的。拥有额外的公理是无效的,并且实际上不允许人们做更多的事情,这与拥有清晰数学的理想背道而驰。
您可能想看看James Anderson 博士在 Transarithmetic 方面的工作。它没有被广泛接受。
Transarithmetic 引入术语/数字“Nullity”以取值 0/0,James 将其比作引入“i”和“j”。
0进入0多少次?5. 是 - 5 * 0 = 0, 11. 是 - 11 * 0 = 0, 43. 是 - 43 * 0 = 0。也许你可以明白为什么它现在是未定义的了?:)
既然x/y=z
应该等价于x=yz
,并且 anyz
会满足0=0z
,那么这样的“例外”会有多大用处?
为什么未定义的另一种解释0/0
是您可以编写:
0/0 = (4 - 4)/0 = 4/0 - 4/0
并且4/0
是未定义的。
如果 a/b = c,则 a = b * c。在 a=0 和 b=0 的情况下,c 可以是任何值,因为 0 * c = 0 对于 c 的所有可能值都为真。因此,0/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 可用于对路线进行的行程编号,该路线被视为“快速服务”路线。
为什么不对这种情况破例呢?
因为:
这就是我要做的:
function div(a, b) {
if(b === 0 && a !== 0) {
return undefined;
}
if(b === 0 && a === 0) {
return Math.random;
}
return a/b;
}
当您输入零除以零时,会出现错误,因为无论您将零乘以什么,都将是零,因此它可以是任何数字。
正如 Andrzej Doyle 所说:
任何被零潜水的东西都是无穷大的。0/0 也是无穷大。你不能得到 0/0 = 1。这是数学的基本原理。整个世界就是这样运转的。但是你可以肯定地编辑一个程序说“0/0 是不可能的”或“不能被零除”,就像他们在手机中所说的那样。