First search for minima and maxima of the function. We do this by setting its first derivative to zero. But there's a catch with this function - the modulus of the variable that is in the denominator of the fraction.
By the quotient rule,
#d/dx[x/(1+|x|)]=((1+|x|)-xd/dx[1+|x|])/(1+|x|)^2#
But what is #d/dx|x|#?
We split the function #g(x)=|x|# into two parts, around its change of behaviour at #x=0#:
If #x>=0#, then #g(x)=x#
If #x<0#, then #g(x)=-x#
Note that at #x=0#, both apply: #g(x)=x=-x#.
We can differentiate each of these separately to obtain a derivative for each part of the function (note that we'll leave #x=0# out for now):
If #x>0#, then #g'(x)=1#
If #x<0#, then #g'(x)=-1#
As there is a sharp kink in the function #|x|# at #x=0#, it is not differentiable there and there is no immediately obvious value to assign to its derivative at that point.
There are a couple of ways of writing #g(x)# as a single expression. We can write it without introducing new notation by writing #g(x)=|x|/x# (or equivalently #x/|x|#), but this is a bit cumbersome when it is basically a piecewise constant function. A better solution is to use the sign function (also known as signum), defined by
If #x>0#, then sgn#(x)=1#
If #x=0#, then sgn#(x)=0#
If #x<0#, then sgn#(x)=-1#
The choice of value for #x=0# is largely immaterial, fits the concept of the function, and has the advantage of symmetry. But let's not forget that we've made a choice here.
Return to problem
We'd deduced that
#d/dx[x/(1+|x|)]=((1+|x|)-xd/dx[1+|x|])/(1+|x|)^2#
Now we can complete this differentiation and set it to zero:
#((1+|x|)-xsgn(x))/(1+|x|)^2=0#
We know that for any real number #x# the denominator will never be #<1#, so there are no nasty infinite blow-ups lurking. We simplify:
#1+|x|-x#sgn#(x)=0#
#1+|x|=x#sgn#(x)#
Let's split this into pieces again:
If #x>0#, then we want #1+x=x#, i.e. #1=0#
If #x=0#, then we want #1=0# (notice that the chosen value doesn't matter)
If #x<0#, then we want #1-x=-x#, i.e. #1=0#
All three produce an immediate contradiction, so there are no solutions over the real numbers to #(df)/dx=0#. Thus #f# has no turning points - it is monotonic over the whole range #(-oo,oo)#. So its two real infinite limits give us the two extremes of the range, and we can now solve the problem.
Real infinite limits
The positive infinite limit is 1: #|x|# dominates the constant in the denominator for large absolute values, and is equal to the #x# numerator for positive values. Hence #lim_(x->+oo)x/(1+|x|)=lim_(x->+oo)x/|x|=1#
The negative infinite limit is -1: #|x|# is equal to #-x# for negative values. #lim_(x->-oo)x/(1+|x|)=lim_(x->-oo)x/|x|=-1#
So the range of our function #f(x)# with the domain taken as the real axis (not including infinities) is #(-1,+1)#. If we do include infinities, we add the end points of the open interval to make it closed: #[-1,+1]#.
Sanity check our solution by plotting the graph of the function along with the asymptotes that we've deduced:
graph{(y-x/(1+|x|))(y-1)(y+1)=0 [-100, 100, -2, 2]}