SORU
13 HAZİRAN 2013, PERŞEMBE


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
13 HAZİRAN 2013, PERŞEMBE


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.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • joshsnice

    joshsnice

    28 Kasım 2006
  • Michael Neal

    Michael Neal

    2 Mayıs 2009
  • UKF

    UKF

    2 Aralık 2009