I think that's a good solution. There is no real way for ALL functions but I will show you an approach that works for differentiable functions where the domain is a CLOSED interval

. Just find the minimum and maximum using differentiation (don't forget to compare them with the endpoints) and then the range is simply [m,M] since your function is continous (google intermediate value theorem and extreme value theorem if you want). Now this approach doesn't generalise nicely to an open interval or to the whole or

(like in your case) or even worse it is crap for something like

. But what you can do if the domain is whole of

is the following if your lucky: if the limits as x goes to infinity or -infinity are in

(m is the smallest local minimum, M is the largest local maximum that you get from differentiating(if they exist)) then you can conclude that the range is indeed

.
This should work for your example as the limits are 0 and should be inside the [m,M] that you get from differentiating (note that

is always a subset of the range if the function is differentiable over an interval (no gaps like 1/x which has gap at x=0))