Math.pow(0.0,0.0)返回1;应该是未定义还是错误?

时间:2013-06-22 19:29:07

标签: java math pow

Java中的

Math.pow(0.0, 0.0)返回1,这是错误的。 0 ^ 0未定义。 Windows计算器中也存在同样的问题(我正在使用Win7)。那是为什么?

Mathematica宣称这是一个错误以及我的卡西欧科学计算器,为什么不是java或Win计算器......这是一个错误吗?

5 个答案:

答案 0 :(得分:8)

在许多情况下,

0 ^ 0 = 1被认为是一个合理的定义。有关支持和反对的参数列表,请参阅http://en.wikipedia.org/wiki/Exponentiation#Zero_to_the_power_of_zero

答案 1 :(得分:5)

因为这正是Javadocs所说的:

  

public static double pow(double a,double b)

返回第一个参数的值,该值是第二个参数的幂。特殊情况:
  *如果第二个参数为正或负零,则结果为1.0。

答案 2 :(得分:5)

  

这是一个错误吗?

不,错误是违反规范的。 specification州:

  

返回第一个参数的值,该值是第二个参数的幂。特殊情况:

     
      
  • 如果第二个参数为正或负零,则结果为1.0。
  •   

最后,数学上,some do define 0^01。事实上,Knuth says 1

  

从空集到空集的映射数为0^0 1

他的推理如下。如果您有两个集AB,则AB的函数数量为|B|^|A|。从空集到空集有多少个函数?嗯,只有一个。按照这种逻辑,0^0 应该1

答案 3 :(得分:2)

Java以这种方式定义它。这就是你能说的全部。

但是,从数学上来说,未定义的数量。一种看待原因的方法是写

x = 0 ^ 0

我用^表示取幂。采用对数,

log x = 0 log 0

我已经这样做了,因为每个数学家都接受log 0未定义,因此它遵循log x,因此x也是未定义的。 (数学上它被称为奇点,数学家会告诉你它是你遇到的最奇点之一)。

答案 4 :(得分:1)

函数行为的确切定义见http://docs.oracle.com/javase/7/docs/api/java/lang/Math.html#pow(double,%20double)

你会在这里看到

public static double pow(double a,
         double b)
Returns the value of the first argument raised to the power of the second argument. Special cases:
If the second argument is positive or negative zero, then the result is 1.0.

不是错误 - 它是设计的。