2016-09-23 4 views
4

exponent(0.0)は、ドメインエラーを起こします。なぜですか? 0.0の指数が1.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

関連する問題