Kayan nokta işlevlerinin zımni hassasiyeti


9

Başka bir programcının incelerken normal dağılım CDF'yi hesaplamak için bir fonksiyonun uygulanması , bir yapılan öneri ya Python'un yerleşik işlevleri veya kullanım SciPy, ortak bilimsel kütüphane ile tüm uygulama değiştirin.

Başka bir programcı , belgelerinde math.erfc()ne scipy.stats.norm.cdf()kesin hassasiyet garantisi ne de verdiğini belirtti . Bu nedenle, bir yaklaşım algoritmasını ( saygın bir kaynaktan alınmış ve hata sınırlarını belgeleyen ) değiştirme konusunda daha dikkatli olmalıyım .

Dürüst olmak gerekirse, yerleşik veya kütüphane işlevinin doğruluğundan ve kesinliğinden şüphe duyma düşüncesi aklımı hiç geçmemişti. Ne de olsa gibi işlevleri çağıran oldum sin()ve sqrt()neden olmalı - çok düşünmeden yıllarca math.erf()veya scipy.stats.norm.cdf()herhangi farklı olabilir?

Ama şimdi endişeliyim. Sorularım:

  1. Genel olarak, dokümantasyon özel bir şekilde belirtilmiyorsa, bu tür fonksiyonların IEEE çift kesinlikli kayar nokta tarafından sunulan hassasiyet dahilinde son ondalık basamağa tamamen doğru olduğu ima ediliyor mu?
  2. Bu özellikle math.erf()Python'lar veya SciPy'ler için geçerli scipy.stats.norm.cdf()mi? Nasıl söyleyebilirsin?
  3. Bu adam sayfasısin() diyor ki…

    Bu işlevler argümanı pi'nin katına yakınsa veya 0,0'dan uzak olduğunda doğruluk kaybedebilir.

    Sinüs fonksiyonu periyodik ve simetrik olduğunda neden bu tür uyarılar var? Optimum doğruluk elde etmek için girdiyi standartlaştırmak için arayanın üzerine bir yük var gibi görünmektedir.

    Öte yandan, Mozilla'nın belgeleri Math.sin()doğruluk veya kesinlik hakkında hiçbir şey söylemiyor. Bu tamamen doğru olduğu anlamına mı geliyor, yoksa Math.sin()JavaScript'teki bazı durumlarda (diğer her yerde olduğu gibi) doğru olan "ortak bilgi" mi?


1
Soru 1 ile ilgili FYI: Genellikle , şamandıranın ikili rakamlarını ifade eden ULP (son yerdeki birimler) açısından hassas garantiler verilir .

Yanıtlar:


10

Belgelere özel bir değinilmiyorsa, bu tür işlevlerin IEEE çift kesinlikli kayar nokta tarafından sunulan hassasiyet dahilinde son ondalık basamağa tamamen doğru olduğu ima ediliyor mu?

Bu varsayımı yapmam.

Çalıştığım yerde telemetri verileri ile ilgileniyoruz ve her ikisi de IEEE kayan nokta standartlarına uysa bile iki farklı matematik kütüphanesinin iki farklı sonuç üretebileceği yaygın bir bilgidir . Bunun, bir hesaplamayı tekrarlamaya ve iki sonucu eşitlik için karşılaştırmaya çalıştığınızda sonuçları vardır.

Optimum doğruluk elde etmek için girdiyi standartlaştırmak için arayanın üzerine bir yük var gibi görünmektedir.

Bu adil bir değerlendirme. Bunu kabul edilebilir kılan , belgelerin hiçbir sürpriz olmaması için bunu belirtmesidir.

Öte yandan Mozilla'nın belgeleri ...

Her bir kütüphane veya programlama dilinde birkaç hesaplamayı denemenizi (özellikle sin()birden çoğunun yakınında olduğu gibi sınır alanlarının yakınında pi) ve karşılaştırmanızı öneririm . Bu, her birinden ne tür bir davranış bekleyebileceğiniz konusunda adil bir fikir vermelidir.


2
Test iyi bir fikirdir. Belgelerin bir şey söylediği sayısız zaman vardır, ancak işlevler başka bir şekilde davranır. OP, belgelenmemiş bile örtük varsayımlara güvenmek istiyor.
Siyuan Ren
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.