A few notes on NDVI ranges:
Very few materials and soils in a scene will have negative NDVI values, and if they do, they will likely only be slightly negative. The only thing offhand that might have significant extent and be (slightly) negative would be water, as it would likely be more reflective in the red vs. the NIR. However, most soils and vegetation (whether live or senescent) will be more reflective in the NIR than the red portions of the spectrum. I have a paper where I analyzed the NDVI ranges of a number of soils- see https://www.soils.org/publications/sssaj/articles/73/5/1545
Most natural surfaces, excepting water, will have NDVI ranging between 0-0.98. The median value of surface soil layers that I tested using Brown et al. (2006)'s spectral library (http://www.sciencedirect.com/science/article/pii/S0016706105001564) had NDVI = 0.15, but the total range was between 0.02 and 0.38.
As for preprocessing- it is generally best to convert your data from DNs to surface reflectance. If you're using Landsat and have access to a Linux machine, then I recommend using LEDAPS (http://ledaps.nascom.nasa.gov/) for this, as it is free and does a good job. LEDAPS is based upon 6S code, also freely available from the University of Maryland. You can also use proprietary MODTRAN or MODTRAN-based methods such as ATCOR or FLAASH to do this, provided you have the necessary licenses. I highly advise against using QUAC in ENVI unless you have hyperspectral imagery.
If you need a "quick-and-dirty" calibration then I suggest converting from DN to top-of-atmosphere reflectance (in ENVI this would be Landsat Calibration to Reflectance), just be aware that any aerosols and high altitude clouds will be biasing your data.