Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Julia 1/2给出0.5,但sqrt(-1)给出DomainError_Julia - Fatal编程技术网

Julia 1/2给出0.5,但sqrt(-1)给出DomainError

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的处理不一致)之间

这是一个关于朱莉娅设计的问题。在Julia中,
1/2
给出
0.5
,通常整数除法返回一个浮点,因此
4/2
2.0
。这似乎是合理的

我想知道为什么同样的推理不适用于
sqrt
。也就是说,对我来说,一致性要求
sqrt
应该总是返回一个
Complex
,特别是
sqrt(-1)
应该返回
im
(或者
-im
,但这是另一个讨论)。但是,
sqrt(-1)
给出了
DomainError

或者至少应该有一个版本的
sqrt
返回复数根(就像除法一样,您有
div
/

因此,有两个问题:

  • 这一设计决策(对
    /
    sqrt的处理不一致)之间的原因是什么
  • 是否有返回复数平方根的
    sqrt
    版本
  • 您应该阅读文档:)

    错误:DomainError:sqrt仅在使用复杂参数调用时返回复杂结果。试试sqrt(complex(x))。 在sqrt的数学课程中。jl:146

    既然im被定义为sqrt(-1),并且您需要sqrt(-1),那么您实际上需要什么呢

     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