...and assuming the stock opens at 48 and closes at 50 with a high of 51 and a low of 47 the percentage ranges will be 8.3% and 8.5%, the point being that your percentage measure of the range is determined entirely by the price level(s) of the denominator(s). This is an important caveat as these levels will change as the price bar data becomes historical data and this historical data is adjusted to accommodate future stock splits, dividends etc. or in the case of back-adjusted futures contracts the data is continually changing levels with the addition of new forward month contracts. Of course you can compensate for this by keeping track of the adjusted close, but then you are adding a data management problem and more complexity.
I would hazard a guess that you are seeking a way to normalise the range so that you can compare ranges at different time periods within the same time series or compare ranges across different time series. If this assumption is correct I would suggest normalising the range by using an average of the immediately preceding n=? bars. This resulting normalised range will remain consistent despite the above mentioned changes in levels in the historical data. Furthermore, I think it intuitively makes more sense to relate any bar's range characteristics to a summary of those that occur immediately before said bar: there is a qualitative difference in nature between a bar with a range of 4 now at a level of 50 that is much bigger/smaller than the average preceding range compared to a bar with a range of 4 six months ago at the 50 level where a range of 4 was "normal" for that market at that time. Using price levels for the denominator would not distinguish between the bars.