Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

the[V]oid

Alter Hase

  • »the[V]oid« ist der Autor dieses Themas

Beiträge: 775

Wohnort: Aachen

  • Private Nachricht senden

1

17.07.2007, 01:34

Nicht nachvollziehbares Ergebnis in float-Rechnung

Zumindest für mich nicht nachvollziehbar ;) Weiß vieleicht jemand, wie mein Programm dazu kommt, bei dieser Rechnung das folgende Ergebnis zu liefern?

Quellcode

1
-0.30000001 = 0.20000000 * (0 + 1) - 0.50000000

Die Zahlen mit Nachkommastellen sind Floats, die ohne sind Integer; es handelt sich bei den Zahlen um Debugger-Ausgaben, daher diese etwas unübliche Schreibweise. Was ich nicht nachvollziehen kann, ist die 1 am Ende vom Ergebnis. Hat es vieleicht etwas damit zu tun, dass man 1 sowohl als 0.99999999 als auch als 1.00000000 darstellen kann? Wenn ja, wie könnte man dieses Problem beheben?

2

17.07.2007, 01:38

Versuch mal 0.3 (<-- Zehnersystem) auf das binäre System umzurechenen. Da wirst du bemerken dass dies nicht möglich ist (unendlich viele Kommastellen nötig) --> Also wird aufgerundet!

0.3 hat im binären System genau soviele Nachkommastellen wie 1/3=0.33333333...=rundung=0.33333334 im Zehnersystem, um es ganz einfach auszudrücken.

mfg Markus

the[V]oid

Alter Hase

  • »the[V]oid« ist der Autor dieses Themas

Beiträge: 775

Wohnort: Aachen

  • Private Nachricht senden

3

17.07.2007, 01:43

OK, danke, das erklärts ^^ Das heißt, es gibt keinen Weg, die obere Rechnung genau (soweit die Nachkommastellen es zulassen) durchzuführen?

4

17.07.2007, 01:44

ne geht nicht, wenn du Genauigkeit brauchst, solltest du einfach auf mehr Kommastellen umsteigen!

Kleiner Trost, wenn du mit 1/3 rechnen willst, das geht sich genau aus :D

mfg Markus

5

17.07.2007, 09:24

deshalb sollte man bei floats afaik auch nie wirklich vergleichen^^

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

6

17.07.2007, 09:28

Zitat von »"lannms11"«

Kleiner Trost, wenn du mit 1/3 rechnen willst, das geht sich genau aus :D

Und wie soll 1/3 in der binären Darstellung aussehen? :?:

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

7

17.07.2007, 09:31

Zitat von »"Eldarion72"«

deshalb sollte man bei floats afaik auch nie wirklich vergleichen^^


Was meinst du mit nicht wirklich vergleichen? Man nimmt bei float Werten zumeist einen Differenzwert zu hilfe, aber verglichen werden die Werte dennoch wirklich! :-P
@D13_Dreinig

8

17.07.2007, 09:34

wenn wir jetzt sein ergebnis mit 0.3 verglichen hätten wäre false rausgekommen obwohl nach unserer rechenlogik ja true hätte rauskommen müssen ;)

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

9

17.07.2007, 09:40

Nicht unbedingt.
Wenn du 0.3f in deinen Code schreibst, muss der Compiler daraus ja auch einen float-Wert machen. Und das wird wahrscheinlich derselbe Wert sein, der da oben als Ergebnis rauskommt.

10

17.07.2007, 09:47

also gibts für 0.3f nur die 0.30000001 darstellung?

Werbeanzeige