Existe-t-il un moyen plus rapide qu'en x >= start && x <= end
C ou C ++ pour tester si un entier est entre deux entiers?
MISE À JOUR : Ma plateforme spécifique est iOS. Cela fait partie d'une fonction de flou de boîte qui restreint les pixels à un cercle dans un carré donné.
MISE À JOUR : Après avoir essayé la réponse acceptée , j'ai obtenu un ordre de grandeur d'accélération sur la seule ligne de code en le faisant normalement x >= start && x <= end
.
MISE À JOUR : Voici le code après et avant avec l'assembleur de XCode:
NOUVELLE FAÇON
// 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
ANCIENNE VOIE
#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
Assez incroyable de voir comment la réduction ou l'élimination des branchements peut fournir une accélération aussi spectaculaire.