ฉันมักจะลงเอยในสถานการณ์ที่จำเป็นต้องตรวจสอบว่าความแตกต่างที่ได้รับนั้นสูงกว่าความแม่นยำของเครื่องหรือไม่ ดูเหมือนว่าเพื่อวัตถุประสงค์นี้ 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
โต้แย้งแก่คุณ