Hızlı eğer bir tam sayı iki tamsayı (dahil) arasında olup olmadığını belirlemek için yolu bilinen ile değer kümeleri
C x >= start && x <= end
veya C daha hızlı bir şekilde eğer bir tamsayı iki tamsayılar arasında ise test var mı?
GÜNCELLEME: Özel benim platform iOS. Bu, belirli bir kare içinde bir daire için piksel kısıtlayan bir kutu bulanıklığı parçasıdır.
GÜNCELLEME: Denedikten sonra ** 15, İ x >= start && x <= end
normal yoldan yapmak bu kod satırında büyüklük hızlanma emri geldi.
GÜNCELLEMEBurada böyle büyük mükafat dan çevirici ile: sonra ve önce kodudur
YENİ BİR YOL
// 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
ESKİ YOL
#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
Dallanma azaltmak veya ortadan kaldırmak ne kadar güzel böylesi dramatik bir hız sağlayabilir.
CEVAP
Sadece bir karşılaştırma/şube ile bunu yapmak için eski bir numara var. Olsun epey hızını olabilir açmak için soru bile yok, muhtemelen çok az fark veya bakımı hakkında, ama ne zaman sen sadece başlangıç ile iki karşılaştırmaları, şansını büyük bir gelişme oldukça uzak. Kod gibi görünür:
// use a < for an inclusive lower bound and exclusive upper bound
// use <= for an inclusive lower bound and inclusive upper bound
// alternatively, if the upper bound is inclusive and you can pre-calculate
// upper-lower, simply add 1 to upper-lower and use the < operator.
if ((unsigned)(number-lower) <= (upper-lower))
in_range(number);
Tipik, modern bir bilgisayar ile (yani, her şeyi ikişer tamamlayıcı kullanarak), imzasız dönüşüm gerçekten bir nop aynı parçaları görülüyor nasıl bir değişim.
Tipik bir durumda, normalde herhangi bir önemli zaman katkı yok-bilgi işlem ön (varsayılan) bir döngü dışında upper-lower
, unutmayın. Talimatları ile birlikte şube sayısını azaltarak, bu da (genellikle) şube öngörü geliştirir. Bu durumda, aynı şube sayısı alt ucunun altında olup alınan veya aralığının üst sonunda yukarıda.
Bu eserler, temel fikir oldukça basit, ama nasıl: işaretsiz bir sayı olarak bakıldığında, pozitif bir sayı olarak başlayan bir şey daha büyük olacak zaman negatif bir sayı.
Pratikte bu yöntem eğer number
aralığı D = upper - lower
** * * * 11*, kökeni ve kontrol noktasına number
ve Aralık çevirir. Alt sınır altında number
:olumsuzeğer üst yukarıda bağlı , ve:D
daha büyük.
Eğer bir dize geçerli bir sayı olup ol...
Eğer bir dize PHP JSON olup olmadığını...
'in daha hızlı ve eğer bir dizi a...
Bir tamsayı'in kare kökü belirlem...
Nasıl bir dize bir sayı olup olmadığın...