Reciprocal Approximation with 1 Subtraction

Today's find: You can get a floating-point approximation of 1/x that's accurate to 3 bits with a single integer subtraction instruction.

  float fast_reciprocal(float x)
  {
    unsigned i = *(unsigned *) &x; 
    i = 0x7effffffU - i;
    return *(float *) &i;
  }
The magic number 0x7effffff accomplishes two things:

1) The exponent is calculated as 253-e, which effectively negates the exponent and subtracts 1.

2) The mantissa is approximated as a 1st order polynomial in the interval [1, 2).

Interesting, but perhaps not very useful (as most CPU:s have more accurate reciprocal approximations these days).


Comments URL: https://news.ycombinator.com/item?id=42547867

Points: 17

# Comments: 9

https://news.ycombinator.com/item?id=42547867

Établi 7d | 31 déc. 2024 à 14:30:06


Connectez-vous pour ajouter un commentaire