当我试图计算时
julia> -2.3^-7.6
-0.0017818389423254909
但是我的计算器给出的结果是
0.0005506 + 0.001694 i
为了安全起见,我再次尝试了,这次它抱怨了。我第一次尝试时为什么不抱怨?
julia> a = -2.3; b = -7.6; a^b
ERROR: DomainError with -2.6:
Exponentiation yielding a complex result requires a complex argument.
Replace x^y with (x+0im)^y, Complex(x)^y, or similar.
Stacktrace:
[1] throw_exp_domainerror(::Float64) at ./math.jl:35
[2] ^(::Float64, ::Float64) at ./math.jl:769
[3] top-level scope at none:0
[4] eval at ./boot.jl:319 [inlined]
[5] #85 at /Users/ssiew/.julia/packages/Atom/jodeb/src/repl.jl:129 [inlined]
[6] with_logstate(::getfield(Main, Symbol("##85#87")),::Base.CoreLogging.LogState) at ./logging.jl:397
[7] with_logger(::Function, ::Atom.Progress.JunoProgressLogger) at ./logging.jl:493
[8] top-level scope at /Users/ssiew/.julia/packages/Atom/jodeb/src/repl.jl:128
这是一个操作顺序问题。您可以看到Julia如何解析该表达式:
julia> parse("-2.3^-7.6")
:(-(2.3 ^ -7.6))
所以你没有任何问题的原因是因为你实际上正在使用2.3 ^( - 7.6),即0.0017818389423254909,然后翻转符号。
你的第二种方法相当于确保“x ^ y”中的“x”确实是负数,或者:
julia> parse("(-2.3)^-7.6")
:(-2.3 ^ -7.6)
julia> eval(parse("(-2.3)^-7.6"))
ERROR: DomainError:
Exponentiation yielding a complex result requires a complex argument.
Replace x^y with (x+0im)^y, Complex(x)^y, or similar.
Stacktrace:
[1] nan_dom_err at ./math.jl:300 [inlined]
[2] ^(::Float64, ::Float64) at ./math.jl:699
[3] eval(::Module, ::Any) at ./boot.jl:235
[4] eval(::Any) at ./boot.jl:234
如果我们遵循该指示,我们会得到您的期望:
julia> Complex(-2.3)^-7.6
0.0005506185144176565 + 0.0016946295370871215im