Bu CS değil, Stackoverflow olduğundan, sayısal analiz ve (işleri basit tutmak için) özellikle IEEE-754 kayan nokta hakkında bir soru sorduğunuzu varsayacağım. Bu durumda, sorunuzun cevabı kısmen "daha kolay" ile kastettiğiniz anlama, kısmen de sistem detaylarına bağlıdır.
Bildiğim modern CPU'ların hiçbiri, ya işlemi için beklediğiniz şeyi yapan bir talimat içermiyor (bundan sonra arayacağız , C'deki olağan adı) veya ( ). Her ikisi de kütüphane işlevleri kullanılarak uygulanır.2 xexexp
2xexp2
Transandantal operasyonlar için tüm sayısal yöntemlerde olduğu gibi, dikkate alınması gereken birkaç özel durum vardır:
exp(NaN) = NaN
exp(+Inf) = +Inf
exp(-Inf) = 0
Bununla birlikte, sorunu biraz daha az karmaşık hale getiren başka bir şey daha vardır: yararlı alan oldukça küçüktür. Binary32 için, exp(x)
eğer underflows ya da öylesine, ve eğer taşıyor kadar. Çünkü Alışılmadık transandantal operasyonlar için, biz de, normalin altında durumda göz ardı edebilirsiniz ayırt edilemez ise normalin altında. Yukarıdakilerin tümü de geçerlidir , ancak alan biraz farklıdır.x > 88,7x < - 104x > 88,7exp(x)
1.0
x
exp2
Sezginiz, çoğu uygulamanın hesaplamasında doğrudur . Ancak, ile çarpmanın maliyeti , diğer bilgisayarlarla karşılaştırıldığında önemsizdir . Tipik bir yöntem elemanları içeren önceden hesaplanmış bir tablo kullanır :1ex=2x/ln2 K1ln2exp2
K
exp2(x)=2n×T[j]×P(y)
burada , tamsayı kısmıdır, tablosu, aralığındaki tüm için değerlerini içerir ve , miktar polinom yaklaşımıdır (quartic, binary32 için yeterlidir32 ) aralığında . sadece üs manipüle beri parçası ucuz. bir arama tablosu. Yani muhtemelen operasyonun pahalı bir parçası olacak.x T 2 j / K j [ 0 , K ) P 2 x [ 0 , 1nxT2j/Kj[0,K)P2x2nTP[0,1K)2nTP
Intel x 86 kayan nokta birimleri olarak adlandırılan bir talimatı içerir bu şeyiyle işaret olmalıdır f2xm1
hesaplar, için aralığında . Bununla birlikte, modern bir CPU'da, bu oldukça pahalı ve boru hattına bağlı olmayan bir talimattır ve bunu kullanmanız kesinlikle önerilmez. As Intel Optimizasyon Referans Kılavuzu Bölüm 3.8.5 haklı notlar:x [ - 1 , 1 ]2x−1x[−1,1]
X87 aşkın talimatları desteklese de, aşkın fonksiyonun yazılım kütüphanesi uygulaması birçok durumda daha hızlı olabilir.
Edit: Yorumlarda IEEE 754-2008'de kullanılan yeni terminolojiden bazılarını açıklamamız gerektiği belirtildi. Dilin bir kısmı 1985 ve 1987'den beri değişti ve çoğu insan eski jargona çok daha aşina.
"Binary32" ve "binary64" terimleri, eski standardın sırasıyla "tek" ve "çift" olarak adlandırdığı 32 bit ve 64 bit ikili kayan noktalı sayıların yeni adlarıdır.
"Alt normal sayı" terimi, önceki "denormal sayı" veya "denormalize sayı" teriminin yerine geçer .