Hızlı ters karekök algoritması hakkında her şey
Algoritma
32 bit kayan nokta: gösterim
32 bit kayan nokta: bitlerin yorumlanması
- Kayan noktanın iç gösterimi normalde programcılar için önemli değildir.
- Ancak bu gösterimi iyi anlamak, verimli algoritmalar tasarlamayı mümkün kılar.
- Kayan noktanın bit desenini tamsayı olarak yorumlamak, log fonksiyonunun yaklaşık bir değerini verir.
log2(x) ≈ Ix / L - B
Newton yöntemi
Sonuç
- Bu algoritma, kayan nokta sisteminin iç matematiksel ayrıntılarını derinlemesine anlayarak ve bilgisayarda hızlı çalışan işlemlerden yararlanarak tasarlanmıştır.
- Algoritmanın kökeni kesin olarak bilinmese de, son derece verimli ve iyi tasarlanmış bir mühendislik örneğidir.
GN⁺ görüşü
- Tarihsel önem: Bu algoritma, dönemin donanım kısıtlarını aşmak için geliştirilmiş yenilikçi bir yöntemdir.
- Eğitsel değer: Kayan noktanın iç yapısını ve matematiksel ilkelerini anlamaya büyük katkı sağlar.
- Modern uygulama: Modern donanımlarda daha az gerekli olabilir, ancak algoritmanın prensipleri hâlâ yararlıdır.
- Optimizasyon potansiyeli: Algoritmadaki sabit değer optimize edilebilir; bu da ek araştırma için alan bırakır.
- Eleştirel bakış: Modern donanımlarda daha iyi yöntemler olabilir; bu yüzden her zaman güncel teknolojilerle karşılaştırmak önemlidir.
2 yorum
İnsan unuturken bir anda yeniden ortaya çıkan o ilginç kod.. heh
Hacker News yorumu
SSE komut desteği: 1999'dan sonra üretilen bilgisayarlar SSE komut setini destekler ve
_mm_rsqrt_pskomutu üzerinden ters karekök hızlıca hesaplanabilir.Modern donanımın gelişimi: Modern donanımda ters karekök hesabı CPU üzerinde hızlıca yapılabilir; tüm kayan nokta işlemlerinin GPU'ya offload edildiği düşüncesi bir yanlış anlamadır.
MMIX implementasyonu: MMIX dilinde ters karekök hesabını gerçekleştiren örnek kod vardır. Bu kod, başlangıçtaki sayının 2^-1021'den büyük olduğunu varsayar.
Formüldeki yazım hatası: Kayan nokta formülünde bir yazım hatası var.
(-1)^Solarak düzeltilmeli.Logaritmanın yorumu: Ham bit desenini yorumlamak, logaritmanın parçalı doğrusal bir yaklaşımı değildir. Veri noktaları arasındaki çizgiler gerçekte mevcut değildir.
Wikipedia referansı: Bu fonksiyon ve geçmişi hakkında Wikipedia'da iyi bir tartışma var. Wikipedia bağlantısı
GitHub kod derlemesi: İlgili bazı kodlar GitHub'da bir araya getirilmiş. GitHub bağlantısı
StackOverflow referansı: Optimize edilmiş düşük hassasiyetli yaklaşım için bir StackOverflow sorusuna da bakmaya değer. StackOverflow bağlantısı
3D motor optimizasyon deneyimi: Quake'den önce 3D motorlar geliştirirken optimizasyon deneyimi biriktirildi ve algoritma optimizasyonunun her zaman kazandığı görüldü.
YouTube video önerisi: Bu konu hakkında ilgi çekici bir video var. YouTube bağlantısı
Üretkenlik zaman hırsızı: Bu konuya kapılıp çok fazla üretken zaman kaybedildi.
En iyi sihirli sayı: Ünlü kod parçasındaki sihirli sayı en iyi sabit değildir. Daha iyi bir sabit bulmak mümkündür ve Jupyter notebook ile en iyi sihirli sayı bulunabilir.