Est-il un moyen plus rapide que x >= start && x <= end
C pour tester si un entier est entre deux nombres entiers?
Mise à JOUR: Mon spécifiques de la plateforme iOS. Cette est une partie d'une zone de flou de fonction qui limite les pixels d'un cercle dans un carré donné.
Mise à JOUR: Après avoir accepté de répondre, j'ai reçu un ordre de grandeur de l'accélération sur une ligne de code en plus de faire de la normale x >= start && x <= end
.
Mise à JOUR: Voici le avant et après le code avec l'assembleur à partir 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
#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 de ramification peut fournir une telle vitesse.