Math 为什么0除以0是一个错误?

Math 为什么0除以0是一个错误?,math,division,divide-by-zero,Math,Division,Divide By Zero,我在代码中的计算中遇到了这个问题,如果divident也为0,则除数为0。在我的代码中,对于这种情况,我返回0。我想知道,虽然被零除通常是未定义的,为什么不为这种情况破例呢?我的理解是,为什么被零除是未定义的,基本上是因为它不能被逆转。但是,在0/0的情况下,我看不到这个问题 编辑好的,所以这个问题引发了很多讨论。我犯了一个错误,因为得到了很多选票,所以我过于急切地接受了一个答案。我现在接受了,因为它提供了一个如何分析问题的想法。比方说: 0/0 = x 现在,重新排列方程式(两边乘以0)得出

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

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

比方说:

0/0 = x
现在,重新排列方程式(两边乘以0)得出:


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

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

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

这里有一个完整的解释:

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


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

既然
x/y=z
应等同于
x=yz
,并且任何
z
都将满足
0=0z
,这样的“异常”有多大用处

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

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

  • 从某种意义上讲,将一个正无穷大的“值”分配给某个严格的正数量/0是有道理的,因为这个极限是明确定义的

  • 然而,
    x/y
    y
    的极限都趋向于零,这取决于它们所走的路径。例如,
    lim(x->0)2x/x
    显然是2,而
    lim(x->0)x/5x
    显然是1/5。极限的数学定义要求它与通向极限的任何路径相同


    • 现代数学的结构是由按照公理思考的数学家设定的。 有额外的公理是没有效率的,并且不允许一个人做更多的事情,这与拥有清晰的数学是背道而驰的

      为什么不破例呢 案子

      因为:

      • 正如其他人所说,这并不容易;)
      • 没有定义0/0的应用程序-添加异常将使数学变得复杂,但没有任何好处
      正如安德烈·道尔所说:


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

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

      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)
      
      但是

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

      说到这里,如果你对如何将一个不确定的形式变成一个确定的形式感兴趣,请查阅l'Hopital的规则,它有效地说:

      f(x) / g(x) = f'(x) / g'(x)
      
      假设极限存在,因此可以得到一个固定点而不是不稳定点的结果

      希望对你有点帮助

      托尼·布雷亚尔


      另外,使用日志规则通常是一种很好的计算方法,可以避免执行操作时出现的问题,这些操作会导致数字非常小,以至于在给定机器浮点值精度的情况下,无法将数字与零区分开来。实际编程示例是“最大可能性”,它通常必须使用日志来保持解决方案的稳定性

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

      0/0 = (4 - 4)/0 = 4/0 - 4/0
      
      而且
      4/0
      是未定义的。

      (受托尼·布雷亚尔(Tony Breyal)对我自己的一篇文章的相当好的回答启发)

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

      零除以任何数字(零本身除外)即为零。更精确地说:

       0/n = 0      for all non-zero numbers n.
      
      当你试图将自己除以零时,你就进入了一个棘手的领域。一个数字除以0并不总是未定义的。这取决于问题。我将给你们一个微积分的例子,其中定义了数字0/0

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

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

       lim{x->2} f(x) 
      
      这是一个非常直观的概念。只要画一张函数图,然后把铅笔沿着它移动。当x值接近2时,请查看函数的位置

      现在我们来举个例子。乐
       0/n = 0      for all non-zero numbers n.
      
       lim{x->2} f(x) 
      
       f(x) = 2x - 2
       g(x) = x - 1
      
       h(x) = f(x)/g(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
      
       0/0 = 1
      
       n * (0/0) = n * 1
      
       (n*0)/0 = n 
       (0/0) = n 
      
       1 = n 
      
      function div(a, b) {
          if(b === 0 && a !== 0) {
              return undefined;
          }
          if(b === 0 && a === 0) {
              return Math.random;
          }
          return a/b;
      }