Ketika meninjau implementasi programmer lain dari fungsi untuk menghitung distribusi CDF normal , saya membuat saran untuk mengganti seluruh implementasi dengan fungsi bawaan Python atau menggunakan SciPy, perpustakaan ilmiah umum.
Programmer lain menunjukkan bahwa keduanya math.erfc()
tidak scipy.stats.norm.cdf()
memberikan jaminan presisi dalam dokumentasi mereka. Oleh karena itu, saya harus lebih berhati-hati dalam mengganti algoritma aproksimasi (yang diambil dari sumber yang disegani , dan yang telah mendokumentasikan batas kesalahan ).
Sejujurnya, pikiran untuk meragukan keakuratan dan ketepatan fungsi built-in atau perpustakaan tidak pernah terlintas dalam pikiran saya. Bagaimanapun, saya telah memanggil fungsi seperti sin()
dan sqrt()
selama bertahun-tahun tanpa banyak berpikir - mengapa harus math.erf()
atau scipy.stats.norm.cdf()
berbeda?
Tapi sekarang, saya khawatir. Pertanyaan saya adalah:
- Secara umum, jika dokumentasi tidak menyebutkan secara khusus, apakah ini menyiratkan bahwa jenis-jenis fungsi ini benar-benar akurat ke tempat desimal terakhir, dalam ketelitian yang ditawarkan oleh IEEE floating-point presisi ganda?
- Apakah itu benar untuk Python
math.erf()
atau SciPyscipy.stats.norm.cdf()
khususnya? Bagaimana kamu bisa tahu? Halaman manual
sin()
ini untuk mengatakan ...Fungsi-fungsi ini mungkin kehilangan keakuratan ketika argumen mereka dekat beberapa pi atau jauh dari 0,0.
Mengapa peringatan seperti itu ada, ketika fungsi sinus periodik dan simetris? Tampaknya ada beban yang dibebankan pada penelepon untuk mengkanoniskan input untuk mendapatkan akurasi yang optimal.
Di sisi lain, dokumentasi Mozilla untuk
Math.sin()
mengatakan apa-apa tentang akurasi atau ketepatan. Apakah itu berarti bahwa itu sepenuhnya akurat, atau itu "pengetahuan umum" yangMath.sin()
hanya akan akurat dalam keadaan tertentu dalam JavaScript, seperti di tempat lain?