Finding the Separate RHS of a/b when b = b' + c

  • Context: Undergrad 
  • Thread starter Thread starter jobyts
  • Start date Start date
Join the discussion
Registration is free. Ask a follow-up in this thread, or start your own.
9 replies · 5K views
jobyts
Messages
226
Reaction score
60
let's say a/b = a/(b'+c)
where b = b'+c.
I need to separate the RHS into a/b' + something. What's that something?
 
Physics news on Phys.org
jobyts said:
let's say a/b = a/(b'+c)
where b = b'+c.
I need to separate the RHS into a/b' + something. What's that something?

What's the context? Is it just algebraic manipulation?

Something = a/(b'+c) - a/b'

and put over a common denominator?
 
I need to convert x (ranging between 0 - 1,000,000) to y (ranging between 0 - (2^32)-1).

so y = (x * 2^32)/1M => (x << 32)/ 1M

We, the software guys have no problem doing it. But the microcode group says they don't have division operation.
I was trying to provide a solution by converting (x << 32)/ 1M to (x <<32) / ((2^20) + a)
(2^20 is the closest approximation to 1M)

I need to measure the error I'm introducing if I assume a=0.
If possible, I want to come up with a calculation as
(x<<32) /((2^20) + a) => (x << 12) + b.
What is b?
 
jobyts said:
I need to convert x (ranging between 0 - 1,000,000) to y (ranging between 0 - (2^32)-1).

so y = (x * 2^32)/1M => (x << 32)/ 1M

We, the software guys have no problem doing it. But the microcode group says they don't have division operation.
I was trying to provide a solution by converting (x << 32)/ 1M to (x <<32) / ((2^20) + a)
(2^20 is the closest approximation to 1M)

I need to measure the error I'm introducing if I assume a=0.
If possible, I want to come up with a calculation as
(x<<32) /((2^20) + a) => (x << 12) + b.
What is b?

Do they have a multiply? Just multiply x * 4295

Will that work?
 
berkeman said:
Do they have a multiply? Just multiply x * 4295

Will that work?

They have multiply operation for integers. Is it possible to make the approximation independent of x? We can use if-then-else.
 
jobyts said:
They have multiply operation for integers. Is it possible to make the approximation independent of x? We can use if-then-else.

Not sure what you mean by approximation. That multiplicative factor is pretty exact for doing the scaling that you asked about. Nice integer multiplication...
 
1000000*4295 = 0x1 0000 7FC0
1000000*4294 = 0x0 FFF1 3D80
1000000*1125899906 >> 18 = 4294967292 (0x0 FFFF FFFC)
1000000*2251799813 >> 19 = 4294967294 (0x0 FFFF FFFE)
 
Last edited:
berkeman said:
Not sure what you mean by approximation. That multiplicative factor is pretty exact for doing the scaling that you asked about. Nice integer multiplication...

2^32 / 1M = 4,294.967296
We rounded 4,294.967296... to 4295.

So, for higher values of x, the deviation would be high.
 
Thanks Berkeman and Xitami for your answers. Xitami's equation gives pretty accurate results.

Xitami, can you tell how you derived that equation?
 
Code:
PARI/GP >[B]{
K=2^32-1;
T=1000000;
m=K/T;
for(i=0,20,
        n=T*truncate(m*2^i)>>i;
        print(i" "K-n))}[/B]
0 967295
1 467295
2 217295
3 92295
4 29795
5 29795
6 14170
7 6358
8 2452
9 499
10 499
11 10
12 10
13 10
14 10
15 10
16 10
17 3
18 3
19 1
20 1
PARI/GP > [B]truncate(m*2^19)[/B]
%2 = 2251799813
PARI/GP > [B]#binary(truncate(m*2^19)*1000000)[/B]
%3 = 51
51 bits of intermediate result
 
Last edited: