2016-03-31 26 views
0

tarafından merak ettim Ben 32 bit kullanarak bir yaklaşım yapma dahil bazı çözüm gördüğü için bir 8-bit genişliğinde kayıt çalışacak bir çözüm. Sınırlı aralığı (sadece 10 olası sonuçları vardır), ikili arama bir tür daha iyi yapabilir VerilenBit bölümü 10

+2

Olası yinelenen (bu muhtemelen çok küçük sayılar için bu optimize etmek denemek için değmez, söyleniyor) bit vardiya kullanarak?] (http://stackoverflow.com/questions/5558492/divide-by-10-using-bit-shifts) – Ashigore

+0

dikkatle ben bir 8 bit genişliğinde kayıt ile çalışıyorum söylüyorum soruyu okursanız . Bu sorunun cevabı bir sayıyı 32'ye kaydırmayı içerir. – Pure

cevap

1

: n < 50 n'nin < 30 n'nin < 10 sonra 0 dönerseniz eğer else if n < 20 geri 1 başka bir geri dönüş 2 başka n dönüşü 3 nolu geri dönüş 4 başka ... (işlem 5.9)

0

here belirtilen yöntem, herhangi bir bit genişliği için genelleştirilebilir. Temelde, (1/10) bulmak * 2 ** (bit genişliği) sonra biraz genişliği ile bölen ve sağ kayması ile çarpın. Programlı javascript kullanarak

şudur ki:

function bitwiseDivApprox(dividend) { 
    var divisor = 26; // Math.ceil((1/10) * Math.pow(2, 8)) 
    return (divisor * dividend) >> 8; 
} 

10 tarafından [Divide