La forma más rápida de determinar si un entero está entre dos enteros (inclusive) con conjuntos conocidos de valores

¿Hay una manera más rápida quex >= start && x <= end en C o C ++ para probar si un entero está entre dos enteros?

ACTUALIZAR: Mi plataforma específica es iOS. Esto es parte de una función de cuadro borroso que restringe los píxeles a un círculo en un cuadrado determinado.

ACTUALIZAR: Después de probar elrespuesta aceptada, Obtuve un orden de magnitud de aceleración en una línea de código en lugar de hacerlo de forma normalx >= start && x <= end camino.

ACTUALIZAR: Aquí está el código posterior y anterior con el ensamblador de XCode:

NUEVA MANERA

// diff = (end - start) + 1
#define POINT_IN_RANGE_AND_INCREMENT(p, range) ((p++ - range.start) < range.diff)

Ltmp1313:
 ldr    r0, [sp, #176] @ 4-byte Reload
 ldr    r1, [sp, #164] @ 4-byte Reload
 ldr    r0, [r0]
 ldr    r1, [r1]
 sub.w  r0, r9, r0
 cmp    r0, r1
 blo    LBB44_30

VIEJA FORMA

#define POINT_IN_RANGE_AND_INCREMENT(p, range) (p <= range.end && p++ >= range.start)

Ltmp1301:
 ldr    r1, [sp, #172] @ 4-byte Reload
 ldr    r1, [r1]
 cmp    r0, r1
 bls    LBB44_32
 mov    r6, r0
 b      LBB44_33
LBB44_32:
 ldr    r1, [sp, #188] @ 4-byte Reload
 adds   r6, r0, #1
Ltmp1302:
 ldr    r1, [r1]
 cmp    r0, r1
 bhs    LBB44_36

Es sorprendente cómo reducir o eliminar la ramificación puede proporcionar una velocidad tan espectacular.

Respuestas a la pregunta(5)

Su respuesta a la pregunta