Julia 1/2给出0.5,但sqrt(-1)给出DomainError
这是一个关于朱莉娅设计的问题。在Julia中,Julia 1/2给出0.5,但sqrt(-1)给出DomainError,julia,Julia,这是一个关于朱莉娅设计的问题。在Julia中,1/2给出0.5,通常整数除法返回一个浮点,因此4/2是2.0。这似乎是合理的 我想知道为什么同样的推理不适用于sqrt。也就是说,对我来说,一致性要求sqrt应该总是返回一个Complex,特别是sqrt(-1)应该返回im(或者-im,但这是另一个讨论)。但是,sqrt(-1)给出了DomainError 或者至少应该有一个版本的sqrt返回复数根(就像除法一样,您有div和/) 因此,有两个问题: 这一设计决策(对/和sqrt的处理不一致)之间
1/2
给出0.5
,通常整数除法返回一个浮点,因此4/2
是2.0
。这似乎是合理的
我想知道为什么同样的推理不适用于sqrt
。也就是说,对我来说,一致性要求sqrt
应该总是返回一个Complex
,特别是sqrt(-1)
应该返回im
(或者-im
,但这是另一个讨论)。但是,sqrt(-1)
给出了DomainError
或者至少应该有一个版本的sqrt
返回复数根(就像除法一样,您有div
和/
)
因此,有两个问题:
/
和sqrt的处理不一致)之间的原因是什么
sqrt
版本 sqrt(complex(im^2))
或者只是:
sqrt(complex(-1))
实际上,它在以下文件中: 或者,或者:
julia> sqrt(complex(-1))
0.0 + 1.0im
简而言之,为了得到负数的
sqrt
的正确答案,它必须是复杂类型。我希望julia语言的一位设计师能过来回答你的第一个问题。@StefanKarpinski如果sqrt
总是返回complex
,那么它的类型也是稳定的。这是真的。但是,对于一个非常常见的情况,即求非负浮点的平方根,它的性能会非常糟糕。@StefanKarpinski,我明白了。谢谢,抱歉我错过了。我的第一个问题很简单:D
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
julia> sqrt(complex(-1))
0.0 + 1.0im