18 lines
420 B
Plaintext
18 lines
420 B
Plaintext
function nthroot(n::Integer, r::Real)
|
|
r < 0 || n == 0 && throw(DomainError())
|
|
n < 0 && return 1 / nthroot(-n, r)
|
|
r > 0 || return 0
|
|
x = r / n
|
|
prevdx = r
|
|
while true
|
|
y = x ^ (n - 1)
|
|
dx = (r - y * x) / (n * y)
|
|
abs(dx) ≥ abs(prevdx) && return x
|
|
x += dx
|
|
prevdx = dx
|
|
end
|
|
end
|
|
|
|
@show nthroot.(-5:2:5, 5.0)
|
|
@show nthroot.(-5:2:5, 5.0) - 5.0 .^ (1 ./ (-5:2:5))
|