Existe uma maneira mais rápida do que x >= start && x <= end
em C ou C ++ para testar se um número inteiro está entre dois números inteiros?
ATUALIZAÇÃO : minha plataforma específica é iOS. Isso faz parte de uma função de desfoque de caixa que restringe os pixels a um círculo em um determinado quadrado.
ATUALIZAÇÃO : Depois de tentar a resposta aceita , recebi um aumento de ordem de magnitude na única linha de código ao fazê-lo da x >= start && x <= end
maneira normal .
UPDATE : Aqui está o código depois e antes com o assembler do XCode:
NEW WAY
// 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
À MODA ANTIGA
#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
É incrível como reduzir ou eliminar a ramificação pode proporcionar uma velocidade tão dramática.