朱莉娅提供了错误的数值结果

问题描述 投票:5回答:1

当我试图计算时

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
math julia operator-precedence
1个回答
9
投票

这是一个操作顺序问题。您可以看到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
© www.soinside.com 2019 - 2024. All rights reserved.