- #1

- 210

- 53

where b = b'+c.

I need to separate the RHS into a/b' + something. What's that something?

You are using an out of date browser. It may not display this or other websites correctly.

You should upgrade or use an alternative browser.

You should upgrade or use an alternative browser.

- Thread starter jobyts
- Start date

- #1

- 210

- 53

where b = b'+c.

I need to separate the RHS into a/b' + something. What's that something?

- #2

berkeman

Mentor

- 60,829

- 11,216

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?

- #3

- 210

- 53

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?

- #4

berkeman

Mentor

- 60,829

- 11,216

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?

- #5

- 210

- 53

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.

- #6

berkeman

Mentor

- 60,829

- 11,216

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...

- #7

- 129

- 0

1000000*4295 = 0x1 0000 7FC0

1000000*4294 = 0x0 FFF1 3D80

1000000*1125899906 >> 18 = 4294967292 (0x0 FFFF FFFC)

1000000*2251799813 >> 19 = 4294967294 (0x0 FFFF FFFE)

1000000*4294 = 0x0 FFF1 3D80

1000000*1125899906 >> 18 = 4294967292 (0x0 FFFF FFFC)

1000000*2251799813 >> 19 = 4294967294 (0x0 FFFF FFFE)

Last edited:

- #8

- 210

- 53

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.

- #9

- 210

- 53

Xitami, can you tell how you derived that equation?

- #10

- 129

- 0

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
```

Last edited:

Share: