5

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

Mathematica 和我的卡西欧科学计算器一样将其声明为错误,为什么不使用 java 或 Win 计算器……这是一个错误吗?

4

5 回答 5

8

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

于 2013-06-22T19:34:10.953 回答
5

因为这正是Javadocs所说的:

public static double pow(double a, double b)

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

于 2013-06-22T19:32:57.353 回答
4

它是一个错误吗?

不,错误是违反规范的东西。该规范指出:

返回第一个参数的第二个参数次幂的值。特别案例:

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

最后,在数学上,有些确实定义 0^01。事实上,Knuth说它必须1.

从空集到空集的映射数为0^0。它必须1

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

于 2013-06-22T19:33:14.970 回答
2

Java defines it that way. That's all you can really say.

However, mathematically it is an undefined quantity. One way to see why is to write

x = 0 ^ 0

where I've used ^ to represent exponentiation. Taking logarithms,

log x = 0 log 0

I've done this since every mathematician accepts that log 0 is undefined and so it follows that log x and therefore x are undefined too. (Mathematically it's called a singularity and a mathematician will tell you that it's one of the worst singularities you can encounter).

于 2013-06-22T19:42:13.953 回答
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.

不是错误 - 这是设计使然。

于 2013-06-22T19:34:18.873 回答