Divide by floating-point number using NEON intrinsics Divide by floating-point number using NEON intrinsics c c

Divide by floating-point number using NEON intrinsics


The NEON instruction set does not have a floating-point divide.

If you know a priori that your values are not poorly scaled, and you do not require correct rounding (this is almost certainly the case if you're doing image processing), then you can use a reciprocal estimate, refinement step, and multiply instead of a divide:

// get an initial estimate of 1/b.float32x4_t reciprocal = vrecpeq_f32(b);// use a couple Newton-Raphson steps to refine the estimate.  Depending on your// application's accuracy requirements, you may be able to get away with only// one refinement (instead of the two used here).  Be sure to test!reciprocal = vmulq_f32(vrecpsq_f32(b, reciprocal), reciprocal);reciprocal = vmulq_f32(vrecpsq_f32(b, reciprocal), reciprocal);// and finally, compute a/b = a*(1/b)float32x4_t result = vmulq_f32(a,reciprocal);