2017-08-13 3 views
3
options(digits = 18) 
x <- 0.127272727272727287 
str(x) 
# num 0.127 
x 
#[1] 0.127272727272727287 
as.character(x) 
#[1] "0.127272727272727" 
as.numeric(as.character(x)) 
[1] 0.12727272727272701 

Woher kommt die 01? Was ist denn hier los?Warum fügt `as.numeric` eines Zeichens mit Dezimalzahlen zusätzliche Zahlen hinzu

+3

Da die schließt Gleitkommazahl, die darstellen, kann '0.127272727272727' ist' 0.1272727272727270098062746228606556542217731475830078125' –

+1

Und 'as.character' stellt reelle und komplexe Zahlen zu 15 signifikanten Stellen (von'? As.character') –

+2

Im Wesentlichen ist ein Duplikat [ Warum sind diese Zahlen nicht gleich?] (Https://stackoverflow.com/q/9508518/903061) – Gregor

Antwort

3

Dies ist in der Hilfeseite ?options angedeutet, wenn Sie den Abschnitt über Ziffern betrachten. Sie können die Anzahl der Ziffern auf eine Zahl von bis zu 22 einstellen, aber das bedeutet nicht, dass R genau so viele Ziffern darstellt. R verwendet IEEE double-precision. Wikipedia sagt uns, dass diese Darstellung

Vorzeichenbit hat: 1 Bit
Exponent: 11 Bit
Signifikanden Präzision: 53 Bits (52 explizit gespeichert)

So R speichert Zahlen log(2^53, 10) = 15.95459 dezimal Ziffern Genauigkeit. Alles, was du darüber hinaus bekommst, ist Glück.

Verwandte Themen