Tôi thường kết thúc trong các tình huống cần kiểm tra xem sự khác biệt thu được có cao hơn độ chính xác của máy không. Có vẻ như cho mục đích này R có một biến tiện dụng : .Machine$double.eps
. Tuy nhiên, khi tôi chuyển sang mã nguồn R để được hướng dẫn sử dụng giá trị này, tôi thấy nhiều mẫu khác nhau.
Ví dụ
Dưới đây là một vài ví dụ từ stats
thư viện:
t.test.R
if(stderr < 10 *.Machine$double.eps * abs(mx))
chisq.test.R
if(abs(sum(p)-1) > sqrt(.Machine$double.eps))
tích hợp.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
hoàng tử.R
if (any(ev[neg] < - 9 * .Machine$double.eps * ev[1L]))
Vân vân.
Câu hỏi
- Làm thế nào người ta có thể hiểu được lý do đằng sau tất cả những khác nhau
10 *
,100 *
,50 *
vàsqrt()
bổ? - Có hướng dẫn về việc sử dụng
.Machine$double.eps
để điều chỉnh sự khác biệt do các vấn đề chính xác?
double.eps
. Nếu bạn đang thực hiện một số thao tác trên số dấu phẩy động, thì khả năng chịu lỗi của bạn cũng sẽ điều chỉnh. Đây là lý do tại sao all.equal cung cấp cho bạn một tolerance
đối số.