Günlükte felaket iptali


18

Düşük göreli hata ile çift hassasiyetli kayan nokta aşağıdaki işlevi uygulamaya çalışıyorum :

lÖgsum(x,y)=günlük(tecrübe(x)+tecrübe(y))

Bu, günlük uygulamalarda temsil edilen olasılıkları veya olasılık yoğunluklarını eklemek için istatistiksel uygulamalarda yaygın olarak kullanılır. Tabii ki, tecrübe(x) veya tecrübe(y) kolayca taşabilir veya taşabilir, bu da ilk başta taşmayı önlemek için günlük alanı kullanıldığından kötü olur. Bu tipik bir çözümdür:

lÖgsum(x,y)=x+lÖg1p(tecrübe(y-x))

den iptaly-x olur, ancak tecrübe . Daha kötüsü, x ve lÖg1p(tecrübe(y-x)) yakın olduğundadır. İşte göreceli bir hata grafiği:

resim açıklamasını buraya girin

Arsa olarak kesilir eğri şeklini vurgulamak l O g s u m ( x , y ) = 0 iptal oluşur hangi. Ben hatayı kadar gördüğüm 10 - 11 ve Daha kötüsü şüpheli. (FWIW, "gerçek gerçeği" işlevi, MPFR'nin 128-bit hassasiyetle keyfi hassas şamandıraları kullanılarak uygulanır.)10-14lÖgsum(x,y)=010-11

Aynı sonuçları veren başka reformları denedim. İle dış ifadesi olarak, aynı hata ile 1. yakın bir şey bir günlük alarak ortaya l O g 1 p dış ifadesi olarak iptal iç ifade olur.günlüklÖg1p

Şimdi, mutlak hata çok küçüktür, bu nedenle çok küçük göreceli hataya sahiptir (bir epsilon içinde). Kullanıcı çünkü biri iddia edebilir l o g ler u m gerçekten (olasılıkları günlüğe) olasılıklar ilgilenen bu korkunç bağıl hata bir sorun değildir. Genellikle değil, ama bir kütüphane işlevi yazıyorum ve istemcileri yuvarlama hata çok daha kötü değil göreceli hata güvenmek istiyorum.tecrübe(lÖgsum(x,y))lÖgsum

Görünüşe göre yeni bir yaklaşıma ihtiyacım var. Ne olabilir?


Son paragrafınızı anlamıyorum. "Bir epsilon içinde" benim için hiçbir şey ifade etmiyor. Son Yerdeki Birlik mi demek istiyorsun ? Kullanıcıların olasılıklarla ilgilenmesiyle ilgili olarak, küçük bir günlük olasılık hatası büyük bir olasılık hatasına neden olacaktır, bu yüzden durum böyle değildir.
Aron Ahmadia

Meraktan, iki yönteminizin "en iyisini" alıp bunun hatasını çizmeyi denediniz mi? O zaman ihtiyacınız olan tek şey, hangi durumda olduğunuzu saptamak için doğru mantıktır (umarım daha az maliyetli veya algoritmanın gerekli maliyetinin bir parçası olmak), ardından uygun yönteme geçin.
Aron Ahmadia

@AronAhmadia: "Bir epsilon içinde", yaklaşık 2.22e-16 olan çift duyarlıklı kayan nokta epsilonundan daha az göreceli hata anlamına gelir. Normal (yani normal olmayan) şamandıralar için, yaklaşık bir ulp'ye karşılık gelir. Ayrıca, , x'in mutlak hatasıysa , exp ( x ) ' in göreli hatasıbirxtecrübe(x), neredeyse sıfıra yakın olan kimlik işlevi olan exp ( a ) - 1'dir . IOW, x için küçük mutlak hata exp ( x ) için küçük göreli hata anlamına gelir. tecrübe(bir)-1xtecrübe(x)
Neil Toronto

Zeyilname: Mutlak hata sıfır olduğunda. Ne zaman bir > 1 , örneğin, haklısın: göreli patlar. birbir>1
Neil Toronto

Yanıtlar:


12

formülü sayısal olarak kararlı olmalıdır. log i e x i = ξ + log i e x i -

lÖgsum(x,y)=maksimum(x,y)+lÖg1p(tecrübe(-abs(x-y))
günlükΣbenexben=ξ+günlükΣbenexben-ξ,   ξ=maksimumbenxben

Günlük toplamının sıfıra çok yakın olması ve yüksek göreceli doğruluk istiyorsanız, muhtemelen

lÖgsum(x,y)=maksimum(x,y)+lexp(x-y)
bir kullanılarak l e x p ( z ) ' nin doğru (yani çift kesinlikten fazla) uygulaması : = log ( 1 + e - | z | )
lexp(z): =günlük(1+e-|z|)
bu da küçük için neredeyse doğrusaldır .z

Mutlak hata açısından, öyle. Göreceli hata açısından, çıktı sıfıra yakın olduğunda korkunçtur.
Neil Toronto

@NeilToronto: Lütfen iki açık giriş vexy

X = -0.775 ve y = -0.6175 için 62271 ulps hatası ve 1.007e-11 göreli hatası alıyorum.
Neil Toronto

1
İlgi alanındaki yüksek doğrulukta veri noktalarını hesaplayın - asimtotik davranış nedeniyle en azından iki farklı aralığa ihtiyaç vardır. Sıfıra yakın olmayan z için tanımlayıcı ifade kullanılabilir. İstisnai aralığı elde etmek için, istisnai aralık için yeterince yüksek derecede rasyonel bir fonksiyon takın. Sayısal kararlılık için, ilgi aralığına uyarlanmış pay ve paydada bernstein polinomları veya Tchebychev polinomları kullanın. Sonunda, sürekli bir kesire genişletin ve doğruluktan etkilenmeden katsayıları ne kadar kısaltabileceğini öğrenin.
Arnold Neumaier

1
Bu m elde etmek için verirl=l(z)m aynı şeyi ancak işlev lexp (Z) -l (z) uygulanır.
Arnold Neumaier
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.