2016-09-23 49 views
4

为什么exponent(0.0)给出域错误?似乎0.0的指数应该与1.0的指数0相同。由于零是一个Int,所以我很困惑为什么会出现在域之外(或者它是一个错误?但是由于设置了错误在这里,它似乎是一个有意识的选择)。为什么指数(0.0)是DomainError?

回答

6

让我们的价值观玩玩看:

julia> exponent(2.0)                                  
1 --- 2^1 = 2 

julia> exponent(4.0)                                  
2 --- 2^2 = 4 

julia> exponent(1.0)                                  
0 --- 2^0 = 1 

julia> exponent(0.5)                                  
-1 --- 2^-1 = 0.5 

julia> exponent(0.25)                                  
-2 --- 2^-2 = 0.25 

. 
. 
. 

因此,这意味着:

julia> exponent(0.0)                                  
-∞ --- 2^-∞ = 0.0 

负无穷大是导致域错误。

+2

噢,呃......我的大脑不工作了一下。很好的解释。 –

+1

但是由于'2.0 ^( - 1024)== 0.0'没有错误,通过无声溢出的同样精神,有'expoenent(0.0)== -1024'没有错误是合理的。特别是考虑到这是忠实于Float64中的实际指数比特表示(按照IEEE754标准)。只是说这是可信的。当前的行为更接近数学的真相。 –

+1

但是使用'exponent(0.0)== -1024'与'exponent(nextfloat(0.0))== -1074'这个事实不一致。 – DNF