I need to improve the performance of the following code (Intel Ivy Bridge, x64):

```
unsigned int delta;
unsigned int a[100];
unsigned int b[100];

...

double sum = 0;

for(int i = 0; i < 100; i++)
    sum += (double)b[i]/a[i];

bool possible = delta >= sum;

```

The bottleneck really is `double` and makes the execution time 3 times more. `a[index]` will be anything from 0 to 500m. `b[index]` will be from 0 to 500.

**Q**: How are the arrays a and b modified between two calls to this piece of code?  

On each call, the **only** difference will be `a[index]++;` where `0 <= index < 100` b is **always** the same. delta also doesn't change.

Due to the fact that the result is compared with another number and stored as boolean, I absolutely need the highest possible accuracy. That's why I used double and not float in first place. As you understand even 1/1b difference will return wrong value, as the result is boolean!