I'm struggling with this for quite some time now. I'm trying to recalculate values uniformly distributed in real numbers range to numbers in non-negative range. Length of non-negative range can vary (but always is a power of two), and with increasing the length, amount of numbers increases up to length of second range, and step decreases.

Example 1: The fixed real range is (-16,16). The non-negative range is <0,32). Amount of numbers is 32. Step is equal 0.5.
Now we want to recalculate numbers so that the first number in first range will be equal to first range in second range, i.e.:
-15.5 = 0,
-15 = 1,
15.5 = 31.

Example 2: The fixed real range is (-16,16). The non-negative range is <0,64). Amount of numbers is 64. Step is equal 0.25.
-15.75 = 0,
15.75 = 31.

Probably it's just a simple task, but I'm after many hours of hardcore programming and samehow cannot come up with a proper solution.


1 Answer 1


The number of steps in your range is $\dfrac{2\max }{\text{step}}-1$, (where $\max$ is the end of the interval, but that value is not used) so in your first case there are $\dfrac{2\times 16}{0.5}-1=63$ If you want to map them into $[0,32)$ the stepsize has to be $0.5$. As the step sizes are the same, the mapping is just $\text{new}=\text{old}+15.5$. For your second case, there are $\dfrac{2\times 16}{0.25}-1=127$ steps. To fit them into $[0,64)$ you need a step of $0.5$ As the step size doubles, the mapping is $\text{new}=2(\text{old}+15.75)$ In the general case the procedure would be:

1) calculate the number of steps as $\dfrac{2\max}{\text{step}}-1$

2) calculate the minimum old value as $\min + \text{step}$

3) calculate the new step size = $(\text{old step}) \dfrac{\text{new range}}{\text{old range}}$

4) as you want the minimum new value to be zero (is this always true?), you have $\text{new value}=\dfrac{\text{new step}}{\text{old step}}(\text{old value}-\text{minimum old value})$

  • $\begingroup$ yes, the minimum value is always 0 $\endgroup$ Sep 29, 2011 at 22:49
  • $\begingroup$ Shouldn't you add one instead of subtract one to find the number of steps? For example, from -1 to 1 in steps of 1 is 3 possibilities, but your formula only yields 1. Or are you assuming that the OP means to exclude the endpoints? $\endgroup$ Sep 29, 2011 at 23:07
  • $\begingroup$ @HenningMakholm:I subtracted $1$ because I used the end of the interval (16) instead of the end step (15.5). Yes, from the examples I took OP to be excluding the endpoints. I will make that clear. $\endgroup$ Sep 29, 2011 at 23:10
  • $\begingroup$ Ah, I must be blind. $\endgroup$ Sep 29, 2011 at 23:13
  • $\begingroup$ the ranges look just as Ross said. First is opened both sides, second is closed from the zero side. $\endgroup$ Sep 29, 2011 at 23:15

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .