Why the `sqrt(x)` does not including the minus part?

HI all,

I try this:

sqrt(1)

why it only returns 1.0 not +1 and -1 ?

How to get all the roots? Which packages to use?

Thanks.

sqrt(x) necessarily returns a Float type as not every number is a perfect square. If you want to return an Integer without concerning oneself with loss of precision, you can do trunc(Int, sqrt(x)).

In this instance, it would personally seem redundant to return a Tuple showing the exact opposites of the same number as every number except 0 has both a positive and negative square root . There is a good discussion about this topic on mathematics stack exchange.

You can write your own square root function:

# keep Float type 
function square_root(x)
           return (sqrt(x), -sqrt(x))
end

# allow for loss of precision by returning as an Integer
function square_root_trunc(x)
           truncated_result = trunc(Int, sqrt(x))
           return (truncated_result, -truncated_result)
end
1 Like

For integer input you also have isqrt, which should avoid rounding errors.

2 Likes

It is really amazing and works great this is the full code for anyone who want:

using SymPy

x = symbols("x")

# To calculate the integral between interval [-2,2]
fc = integrate(abs(x), (x, -2, 2))

# keep Float type 
function square_root(x)
           return (sqrt(x), -sqrt(x))
end

# allow for loss of precision by returning as an Integer
function square_root_trunc(x)
           truncated_result = trunc(Int, sqrt(x))
           return (truncated_result, -truncated_result)
end

# Find the values of c that satisfy the Mean Value Theorem for Integrals
# since f(x) = |x|, then f(c) = |c|
c = fc/(2-(-2))
println("f(c) = |c| = ", c)

println("c = ", square_root(c))

1 Like

As for the ±, that is just the definition of the square root. That is, while (-1)^2 = 1, \sqrt{1} = +1.

1 Like