Strona pomoc dla ?is.integer
ma notatkę o funkcji, która powie nam, czy dana liczba jest liczbą całkowitą:Dlaczego należałoby użyć tej tolerancji w is.wholenumber
is.wholenumber <-
function(x, tol = .Machine$double.eps^0.5) abs(x - round(x)) < tol
co może być argumentem do korzystania sqrt(eps)
jako tolerancja tutaj? Czy istnieje również dobry powód, aby używać czegoś innego niż tylko tol=0
?
Tło jest moją odpowiedzią na temat tego question. Niektórzy komentatorzy sprzeciwili się tej funkcji.
Moja prosta hipoteza poglądowa: robi się to, aby zamknąć drukowanie (domyślnie 7 cyfr dziesiętnych). Np:
> 1.000005
[1] 1.000005
> 1.0000000005
[1] 1
> is.wholenumber(1.000005)
[1] FALSE
> is.wholenumber(1.0000000005)
[1] TRUE
To nie działa perfekcyjnie, choć:
> 1.00000005
[1] 1
> is.wholenumber(1.00000005)
[1] FALSE
Nie ma lepszego argumentu w poniższych Uwagi: sqrt(eps)
może być (szorstki) oszacowanie zaokrąglić błędu spowodowanego przez operacje zmiennoprzecinkowe.
Nie ma to nic wspólnego z drukowaniem. Jest to mniej więcej precyzja, jakiej można oczekiwać od arytmetyki o podwójnym zmiennoprzecinkowym. –
Ktoś zagłosował, aby zamknąć to pytanie. Czy możesz wyjaśnić, dlaczego? Dzięki. (Chciałem się dowiedzieć, z jakiej zasady nie skorzystałem). –
@JoshuaUlrich Dzięki. To ma sens. –