2011-10-28 7 views
5

Czy ktoś może wyjaśnić, dlaczego daje to różne wyniki?R Wyjaśnienie zaokrągleń

round(1.49999999999999) 
1 


round(1.4999999999999999) 
2 

Przeczytałem okrągłą dokumentację, ale nic o niej nie wspomina. Wiem, że R reprezentuje liczby w formie binarnej, ale dlaczego dodanie dwóch dodatkowych zmian 9 powoduje powstanie wyniku?

Dzięki.

+0

See [ta odpowiedź] [1] o problemach w R. [1]: http://stackoverflow.com/questions/1535021/whats-the-biggest-r-gotcha-youve- run-across/3398868 # 3398868 – John

Odpowiedz

7

1.4999999999999999 nie mogą być reprezentowane wewnętrznie, więc robi się w zaokrągleniu do 1.5.

Teraz, po zastosowaniu round(), wynikiem jest 2.

+0

Dzięki, R może czasami dawać dziwne wyniki w ułamkach dziesiętnych. – user557240

+5

@ user557240 Nie ma nic szczególnego w R w tym zakresie. – joran

2

Umieść te dwie liczby w zmiennej, a następnie wydrukuj - zobaczysz, że są różne.

Komputery nie przechowuje tego rodzaju numerów z dokładnym tej wartości (Nie używać numerów dekadowe wewnętrznie)

+1

Powinieneś lepiej ustawić 'opcje (cyfry = 20)' zanim je wydrukujesz lub będą one ** wyglądały ** identycznie –

+0

Jak zauważono w innych odpowiedziach - 1.4999999999999999 jest zapisany jako 1.5, więc ty nie osiągniesz tego samego wyniku! – Hurda

2

Nigdy nie używałem R, więc nie wiem, czy to jest problem, ale w innych językach, takich jak C/C++, liczba jak 1,4999999999999999 jest reprezentowana przez zmienną lub podwójną.

Ponieważ mają one skończoną precyzję, nie można dokładnie przedstawić wartości 1.4999999999999999. Może się zdarzyć, że zamiast tego 1.4999999999999999 zostanie zapisany jako 1.50000000000000 z powodu ograniczeń precyzji zmiennoprzecinkowej.

+1

R używa arytmetyki zmiennoprzecinkowej IEEE, więc ma te same problemy. –