runden
-
hi
wird 330 + (330 * 1/4) in float gerechnet? warum wirds auf 412 gerundet?
bye
-
1.) Nein.
2.) Abschnittsrundung.
-
bgdnoy schrieb:
1.) Nein.
2.) Abschnittsrundung.oder nochmal ausführlicher: du verwendest in deinem Code NUR Ganzzahl-Werte, daher kommt auch kein float bei raus. Du könntest z.b. statt 1/4 schreiben 0.25 dann kommt als Endergebnis auch float-wert raus.
Hier noch wie das ganze intern gerechnet wird:
330 + (330 * 1/4)
zuerst innere Klammer auflösen: (330 * 1) = 330 -> 300 / 4 = 82.5 -> wird abgeschnitten auf 82 -> 330 + 82 = 412
so einfach isses
-
tomtom1 schrieb:
hi
wird 330 + (330 * 1/4) in float gerechnet? warum wirds auf 412 gerundet?
bye
Schreib einfach:
330.f + (330.f * 1.f/4.f)
-
Es reicht ein einfacher Punkt hinter der eins.
Dadurch wird diese vom Compiler als float angesehen. Bei einer Operation ist das Ergebnis immer im größeren Format von den beiden Operanten.330 + (330 * 1./4)
Ein Punkt an der Stelle:
330. + (330 * 1/4)
bewirkt dagegen nichts, da das Programm erstmal 330*1 (=330)/4 (= 82) und dann + 330. (was dann ein float währe, jedoch trotzdem 412) rechnet.
mfg martin
-
trotzdem würde ich 'floats' und 'doubles' nur verwenden, wenn ich kleine andere wahl habe. berechnungen mit floats und doubles sind oft sehr langsam und immer ungenau.
-
Was heißt denn 'oft sehr langsam'
Ich glaube das Programm was er schreiben möchte ist nun wirklich nicht 'rechenzeitkritisch'.
Zudem möchte er ja einen float haben.Was heißt 'ungenau'
Wenn es um reele Zahlen geht ist jeder Datentyp irgendwann 'ungenau'. Ich denke aber dass er bei der Rechnung 330 + (330 * 1./4) nicht an die Grenzen des floats oder doubles stoßen wird.Diese Langsam-Ungenau Diskussion erübrigt sich denn es kommt immer auf das Problem an, welches man behandelt. Da hier ein einfaches Anfängerproblem zur Debatte steht brauchst du tomtom nicht mit solch tiefgründigen Problemen verwirren.
lG martin
-
WC-Stein schrieb:
Diese Langsam-Ungenau Diskussion erübrigt sich denn es kommt immer auf das Problem an, welches man behandelt.
ja schon, aber floats und doubles haben ihre tücken. das sollte man im hinterköpfchen behalten.
WC-Stein schrieb:
Da hier ein einfaches Anfängerproblem zur Debatte steht brauchst du tomtom nicht mit solch tiefgründigen Problemen verwirren.
ist doch ganz gut, wenn man schon früh auf stolperfallen aufmerksam gemacht wird. mein rat lautet nunmal: 'nehmt float und double nur, wenn ihr müsst. sonst sind ganzzahlige typen vorzuziehen'. ob das jemand für schwachsinn hält, bleibt natürlich jedem selbst überlassen.