Юлия дает неверный числовой результат - PullRequest
0 голосов
/ 08 сентября 2018

Когда я пытался вычислить

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

1 Ответ

0 голосов
/ 08 сентября 2018

Это вопрос порядка операций. Вы можете видеть, как Юлия анализирует это выражение:

julia> parse("-2.3^-7.6")
:(-(2.3 ^ -7.6))

и поэтому причина, по которой у вас нет проблем, заключается в том, что вы на самом деле берете 2,3 ^ (-7,6), то есть 0,0017818389423254909, а затем переворачиваете знак.

Ваш второй подход эквивалентен проверке того, что «x» в «x ^ y» действительно отрицательный, или:

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
...