Warum gibt ein Bruch in C++ den Wert Null zurück?
Wenn ich in C++ einen Float-Datentyp definiere und ich ihn weiße ihm den Wert 1 / 2 zu. Wenn ich ihn jedoch ausgeben lasse behauptet er die Variable sei 0.
float test = 1 / 2;
float test = 0.5; funktioniert.
Ich habe keine Ahnung woran es liegt und wie ich mein Resultat erhalte. Ich wäre um Tipps dankbar, Julian.
3 Antworten
Informiere dich mal über den Begriff "typecasting".
Wenn du folgenden Code hast:
float test = 1/2;
Dann initialisiert das Programm erstmal eine Variable, dann rechnet es die Division der Integers 1/2 durch und schreibt das Ergebnis in den dazugehörigen Speicherplatz. Der springende Punk ist, dass Integer-division durchgeführt wird, in dieser wird immer abgerundet. Es gilt also 1/2 = 0.
Du kannst dem Programm sagen, dass es keine Integerdivision durchführen soll, indem du typecastest, also eine der beiden Zahlen zu einer float machst, dann wird normale float-division durchgeführt.
Beispiel:
float test = ( (float) 1)/2;
Oder einfacher:
float test = 1./2;
Sobald du 1. schreibst, wird die 1 als eine Fließkommazahl interpretiert und ist automatisch eine float.
LG
1 ist ein integer , 2 ist auch ein integer , wenn du 1 durch 2 teilst, ist das also eine Integerdivision, und somit ist das Ergebnis auch ein Integer, wird also abgerundet zu 0. Dass das danach einem float zugewiesen wird ist dem Compiler in dem Moment der Rechnung wohl egal.
Weise ihm doch mal 1.0 / 2.0 zu oder oder 1.0f / 2.0f oder caste deine Integer auf einen float oder double bevor du sie verrechnest oder ändere die Rundung von Integer von "Nachkommastellen vergessen" auf richtige Rundungsregeln, damit dann 1 statt 0 rauskommt, was dir auch nichts helfen wird.