float, compiler rundet automatisch -> abstellen
-
Hallo,
ich habe festgestellt, dass die C-Compiler floats immer runden. Leider hätte ich lieber den Float mit Nachkommastellen, denn so werden meine Ergebnisse stark verfälscht.
Weiß jemand, wie man das runden abstellen kann?
-
Bist du sicher, daß du mit floats arbeitest? Die runden ihre Werte erst, wenn sie ans Ende der Genauigkeitsgrenze kommen. Und wenn dir die float-Genauigkeit nicht reicht, nimm double.
(Nachkommastellen abgeschnitten werden nur bei Ganzzahltypen (int, long etc.))
-
Hallo,
float hat Nachkommastellen, einige sogar^^
Vermutlich gibst du nur zu wenige über die printf Methode aus?!#include <stdio.h> int main(int argc, char **argv) { float a = 123.456789, b = 987.654321; float c = a+b; printf("%f\n", c); return 0; };
EDIT:
Yiepp, zu langsamMfG
GPC
-
du meinst die abweichungen vom wirklichen wert? das ist normal. in floats und doubles passen nur vielfache bzw. brüche von 2 komplett rein. bei allem anderen geht der rest verloren.
-
Ich rechne f = 0.0 + 1/3 und erhalte als Ausgabe: 1.0.
Ich dachte, ich müsste als Ausgabe 0,33 erhalten?
Kann ich in einen float keine Brüche schreiben (gleiches Problem habe ich auch mit 1/4 usw.)?
-
Die Ausgabe ist 0.0 und nicht 1.0, sorry.
-
Bei 1/4 werden zwei Integerzahlen dividiert, das Ergebnis ist wieder eine Integerzahl, also folglich 0. Du willst 1.0/4.0 rechnen.
-
Hallo float!
wenn Du 1/3 eingibst, macht der Computer eine Integer-Division (3 passt Null-mal in die 1 -- ganzzahlig gesprochen).
Probier mal 1./3. (man beachte die Punkte!!!)
-
guggst du: (float)0 + (float)(1/3) = 0,33
muß du halt im Zweifelsfal so schreiben, dann sollte es klappen.
-
guggst du? schrieb:
guggst du: (float)0 + (float)(1/3) = 0,33
muß du halt im Zweifelsfal so schreiben, dann sollte es klappen.
Leider nicht ergibt 0.
(float)0 + ((float)1/3)
ist besser
Kurt
-
was spricht gegen die punktnotation 0.0 + 1.0 / 3.0 ?
zumal so ein cast doch reichlich haesslich wirkt.