ฉันมักจะลงเอยในสถานการณ์ที่จำเป็นต้องตรวจสอบว่าความแตกต่างที่ได้รับนั้นสูงกว่าความแม่นยำของเครื่องหรือไม่ ดูเหมือนว่าเพื่อวัตถุประสงค์นี้ R .Machine$double.epsมีตัวแปรที่มีประโยชน์: อย่างไรก็ตามเมื่อฉันหันไปใช้ซอร์สโค้ด R เพื่อหาแนวทางเกี่ยวกับการใช้ค่านี้ฉันจะเห็นรูปแบบที่แตกต่างกันหลายแบบ
ตัวอย่าง
นี่คือตัวอย่างจากstatsห้องสมุด:
t.test.R
if(stderr < 10 *.Machine$double.eps * abs(mx))
chisq.test.R
if(abs(sum(p)-1) > sqrt(.Machine$double.eps))
integrate.R
rel.tol < max(50*.Machine$double.eps, 0.5e-28)
lm.influence.R
e[abs(e) < 100 * .Machine$double.eps * median(abs(e))] <- 0
princomp.R
if (any(ev[neg] < - 9 * .Machine$double.eps * ev[1L]))
เป็นต้น
คำถาม
- วิธีการหนึ่งที่สามารถเข้าใจเหตุผลที่อยู่เบื้องหลังเหล่านั้นแตกต่างกันทั้งหมด
10 *,100 *,50 *และsqrt()ปรับเปลี่ยน? - มีแนวทางเกี่ยวกับการใช้
.Machine$double.epsเพื่อปรับความแตกต่างเนื่องจากปัญหาความแม่นยำหรือไม่
double.epsหากคุณเป็นเพียงการเปรียบเทียบกับตัวเลขทศนิยมใช้ หากคุณกำลังดำเนินการหลายอย่างกับหมายเลขจุดลอยตัวความคลาดเคลื่อนข้อผิดพลาดของคุณควรปรับด้วย นี่คือเหตุผลที่all.equalให้การtoleranceโต้แย้งแก่คุณ