2016-03-30 19 views
2

これはJuliaの設計に関する質問です。ジュリアでは、1/20.5となり、一般的に整数除算ではFloatが返されるため、4/22.0です。これは妥当と思われます。1/2は0.5を返しますが、sqrt(-1)はDomainErrorを返します

sqrtと同じ理由が適用されなかったのはなぜですか?つまり、私には、sqrt、常に、返信はComplex、特にsqrt(-1)im(または-imですが、これは別の説明です)を返す必要があります。しかし、sqrt(-1)DomainErrorとなります。

少なくとも、複素数のルートを返すsqrtのバージョンが必要です(除算の場合と同じように、div/)。

だから、二つの質問:この設計上の決定(/sqrtの一貫性のない治療)との理由

  1. 何でしたか?
  2. 複合平方根を返すsqrtのバージョンがありますか?
+0

私はジュリア語のデザイナーの一人があなたの最初の質問に答えるのをやめたいと思っています。 –

+0

http://docs.julialang.org/en/release-0.4/manual/faq/#why-does-julia-give-a-domainerror-for-certain-semingly-sensible-operations – StefanKarpinski

+0

@StefanKarpinski 'sqrt'の場合常に 'Complex'を返します。また、型安定です。 – becko

答えて

7

あなたは、ドキュメントを読んでください:)

sqrt(-1) 

ERROR:DomainError:複雑な引数で呼び出された場合はsqrtだけ複雑な結果を返しますが。 sqrt(complex(x))を試してください。 math.jlでSQRTで :イムは(-1)SQRTとして定義され、あなたがこれを行うことができSQRTを(-1)が必要されているので146

それで、あなたはacctualy必要..

sqrt(complex(im^2)) 

かただ:

sqrt(complex(-1)) 
+4

ドキュメントでさえ、それはエラーメッセージにあります。 – StefanKarpinski

+0

申し訳ありませんが、私はそれを逃した。私の最初の質問は些細なものでした:D – becko

+0

私はジュリアを持っていないので、私はドキュメントを見ました:) –

1

それは実際にcomplex numbersのドキュメントである:

julia> sqrt(-1) 
ERROR: DomainError: 
sqrt will only return a complex result if called with a complex argument. Try sqrt(complex(x)). 
in sqrt at math.jl:146 

julia> sqrt(-1 + 0im) 
0.0 + 1.0im 

あるいは、 lternatively:

julia> sqrt(complex(-1)) 
0.0 + 1.0im 

だから要するに、負の数のsqrtに対する適切な答えを得るためには、複合型である必要があります。

関連する問題