Math.pow(0.0, 0.0)
返回1,这是错误的。 0 ^ 0未定义。 Windows计算器中也存在同样的问题(我正在使用Win7)。那是为什么?
Mathematica宣称这是一个错误以及我的卡西欧科学计算器,为什么不是java或Win计算器......这是一个错误吗?
答案 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^0
为1
。事实上,Knuth says 为1
。
从空集到空集的映射数为
0^0
。 为1
。
他的推理如下。如果您有两个集A
和B
,则A
到B
的函数数量为|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.
不是错误 - 它是设计的。