2017-05-03 9 views
-1

Ich habe ein Problem mit R gefunden.Einfache Division in R ergibt falsches Ergebnis

Wenn ich die folgende Division einfüge, bekomme ich diese Ergebnisse.

9207550/4 

Ergebnis:

2301888 

Aber es sollte sein:

2301887.5 

Wenn ich Zähler und Nenner für mehrere Nullen hinzufügen, erweitern, erhalte ich das gleiche Ergebnis:

9207550.0000/4.0000 

2301888 

Kommt jemand an Das gleiche Problem? Kann mir jemand dieses Verhalten erklären?

Vielen Dank im Voraus. Jede Hilfe wird geschätzt.

+8

'print (9207550/4, Ziffern = 10)' so ist es eine optische Täuschung/Standard-Druck Quirk. Siehe '? Print.default'. Eigentlich können Sie '2301887.5' an der Konsole eingeben und auch die Rundung sehen. – Frank

+2

Sie haben uns das Ergebnis des Druckens gezeigt. Das unterscheidet sich vom Ergebnis der Berechnung. Das Ergebnis der Berechnung ist wie erwartet: 'x <- 9207550/4; 4 * x' – jogo

+1

@Frank danke für Ihren Kommentar. Ich sehe, dass ich das Ergebnis falsch interpretiert habe. –

Antwort

2

Es gibt eine Option in R, um die Anzahl der angezeigten Ziffern zu steuern. Als Beispiel:

options(digits=5) 

oder wenn Sie kein Fan von wissenschaftlicher Notation dann:

options(digits = 999) 

Die meisten Systeme sind in der Regel einige Standardanzeige Präzision eingebaut haben, aber die von der eigentlichen Berechnung unterscheidet wie von @jogo erwähnt. R unterscheidet sich von keinem dieser Systeme, wenn es um die Ergebniswiedergabe geht.

Was die Berechnung betrifft, so wird die Basis R Berechnung für eine meisten Zahlen ausreichen, die Sie im täglichen Leben beschäftigen wird, aber wenn Sie wirklich n Dezimalstellen genau sein wollen, wo n typisch sein kann größer als 15 würde ich vorschlagen, gmp, Rmpfr oder rcdd Pakete zu verwenden.

EDIT

Ich habe gerade bemerkt Ihr Versuch float Division. Bestimmte Sprachversionen wie Python 2.xx haben eine andere Behandlung der Division, wenn es um floats vs integers geht, die Speicher- und Recheneffizienz für die Zeiten, in denen es geschrieben wurde. Dieser Unterschied ist jetzt in der neuesten Version verschwunden. R wurde von Statistikern für Statistiker erstellt, so dass Sie sicher sein können, dass die Standardbehandlung bei mathematischen Operationen unterschiedlich ist. Zahlen sind, was sie sind - Zahlen. Int und float sind programmatische Konstrukte, keine mathematischen Konstrukte.