?is.integer
için yardım sayfası bize söyleyecek bir işlevi hakkında bir not vardır
: argümanı ne olabilir Neden kimse is.wholenumber bu toleransı kullanmak istiyorsunuz
is.wholenumber <-
function(x, tol = .Machine$double.eps^0.5) abs(x - round(x)) < tol
sqrt(eps)
kullanmak Burada hoşgörü olarak mı? Ayrıca,
tol=0
'dan başka bir şey kullanmak için iyi bir neden var mı?
Arka planım bu question numaralı telefondaki cevabım. Bazı yorumcular bu işleve itiraz ettiler.
Basit düşünceye dayanan hipotezim: bu, yazdırılacak davranışlarda (7 ondalık basamaklı varsayılan) yakınlaştırmak için yapılır. Ör:
> 1.000005
[1] 1.000005
> 1.0000000005
[1] 1
> is.wholenumber(1.000005)
[1] FALSE
> is.wholenumber(1.0000000005)
[1] TRUE
Mükemmel olsa çalışmaz: sqrt(eps)
neden yuvarlama hatası (kaba) tahmin çekebilir:
> 1.00000005
[1] 1
> is.wholenumber(1.00000005)
[1] FALSE
aşağıdaki yorum daha iyi bir argüman var kayan nokta işlemleri.
Baskı ile ilgisi yoktur. Çifte kayan nokta aritmetiğinden beklediğiniz hassasiyet miktarıdır. –
Birisi bu soruyu kapatmak için oy kullandı. Lütfen nedenini açıklayabilir misiniz? Teşekkürler. (Hangi kuralı reddettiğimi öğrenmeye istekliyim). –
@JoshuaUlrich Teşekkürler. Bu aslında mantıklı. –