Dalam hal ini NaN
(bukan angka) dikembalikan karena perhitungan luapan eksponensial dalam aritmatika presisi ganda.
Ekspresi yang setara secara aljabar, diperluas dalam seri MacLaurin sekitar , adalah0
exp( x )1 + exp( x )=11 + exp( - x )= 1 - exp( - x ) + exp( - 2 x ) - ⋯ .
Karena ini adalah seri bergantian, kesalahan yang dibuat dalam menjatuhkan istilah apa pun tidak lebih besar dari ukuran istilah berikutnya. Jadi ketika , kesalahannya tidak lebih besar dari relatif terhadap nilai sebenarnya. Itu jauh lebih tepat daripada perhitungan statistik apa pun yang perlu dilakukan, jadi Anda boleh mengganti nilai pengembalian dengan dalam situasi ini.x > 710exp( - 710 ) ≈10- 308≈2- 1024 1
Menariknya, R
tidak akan menghasilkan NaN
ketika eksponensial mengalir . Dengan demikian Anda bisa memilih versi perhitungan yang lebih andal, tergantung pada tanda x
, seperti pada
f <- function(x) ifelse(x < 0, exp(x) / (1 + exp(x)), 1 / (1 + exp(-x)))
Masalah ini muncul di hampir semua platform komputasi (saya belum melihat pengecualian) dan mereka akan bervariasi dalam bagaimana mereka menangani overflow dan underflow. Eksponensial terkenal karena menciptakan masalah seperti ini, tetapi mereka tidak sendirian. Oleh karena itu, tidak cukup hanya dengan memiliki solusi R
: seorang ahli statistik yang baik memahami prinsip-prinsip aritmatika komputer dan tahu bagaimana menggunakannya untuk mendeteksi dan mengatasi kekhasan lingkungan komputernya.