Komisches Ergebnis einer Rechnung mit float



  • Ich hab mal aus fun einen Rechner zum berechnen von der Fläche und vom Umfang eines Kreises. Das Problem ist dass ich für Pi float genommen habe und da float ja nicht genug stellen für viele Pi stellen hat und deshalb ein Ergebnis wie dieses hergibt: 3.53282e-038
    das problem ist, als ich dann zum test für Pi einfach 3 genommen habe, hat er genausoein Ergebnis rausgeworfen.
    3.53282e-038 kommt raus wenn Pi 3 ist und der Radius auch 3. 2*3*3=18 hätte ich erwartet aber ich schätze mal es liegt daran dass ich float falsch verwende.
    welchen typ sollte ich benutzen bzw. wie float? Ich will nen klares Ergebnis



  • Zeig mal den Code.


  • Mod

    Zeig doch mal deine Rechnung. float ist schon ziemlich genau, du hast bestimmt irgendeine Dummheit gemacht.



  • int main ()
    {
    	float u;			//Deklarierungen
    	float r;
    	float f;
    	float P;
    	int a;				//a für Auswahl
    
    	P = 3;		//Definierung Pi
    	u = 2 * r * P;
    	f = r * r * P;
    
    	cout << "Was wollen sie berechnen?" << endl;
    	cout << "1: Umfang" << endl << "2: Fläche" << endl;
    	cin >> a;
    
    	if (a == 1)
    	{
    		cout << "Sie haben Umfang gewählt." << endl;
    		cout << "Geben sie den Radius ein:" << endl;
    		cin >> r;
    		cout << "Der Umfang beträgt:" << u << endl;
    	}
    	return 0;
    
    }
    

    das zweite if für die Fläche hab ich nochnet weil ich erstmal testen woltle ob umfang richtig ist



  • Du musst die Berechnung für u hinter den Input, in die if-Abfrage tun.
    Du dafst niemals unitialisierte Variablen verwenden!


  • Mod

    C++ hat keine lazy-evaluation. In Zeile 10 und 11 wird das Ergebnis mit dem zu der Zeit geltenden Werten berechnet. Dort definierst du keine Rechenvorschrift, wie später u und f zu berechnen sind. Da r an der Stelle aber irgendeinen Unsinnswert hat, kommt auch ein Unsinnsergebnis für u und f heraus. Dieses ändert sich auch nicht, wenn du später r veränderst.

    Suchst du vielleicht Funktionen?


  • Mod

    Bitte bleib bei einem Thema. Besonders wenn es ein komplett anderes ist als eigentlich diskutiert wird. Ich habe deine neue Frage abgespalten, hier geht es weiter:
    http://www.c-plusplus.net/forum/p2223137



  • ja sry hatte es nur direkt hierhin geschrieben weil ich ja die lösung für den rechner testen wollte

    EDIT: hmm der neue code ist so:

    #include<iostream>
    using namespace std;
    
    int main()
    {
    	float u;			//Deklarierungen
    	float P;
    	float r;
    	int a;				//a für Auswahl
    
    	P = 3;		//Definierung Pi
    
    	cout << "Was wollen sie berechnen?" << endl;
    	cout << "1: Umfang" << endl << "2: Fläche" << endl;
    	cin >> a;
    
    	if (a == 1)
    	{
    		u = 2 * r * P;
    		cout << "Sie haben Umfang gewählt." << endl;
    		cout << "Geben sie den Radius ein:" << endl;
    		cin >> r;
    		cout << "Der Umfang beträgt:" << u << endl;
    	}
    	return 0;
    
    }
    

    jedoch immernoch das gleiche problem oO
    ergebnis ist mit radius 3:
    3.53282e-038
    tja un jetzt :/?

    EDIT: ok das hab ich eben selbst gemerkt. ich dachte die Rechnung muss nur in der gleichen Klammer sein aber mir ist aufgefallen dass das problem ja war dass r nochnicht definiert war. hab ich die rechnung hinter die eingabe von r gepackt und es klappt 😃
    fertig is jetzt so:

    #include<iostream>
    using namespace std;
    
    int main()
    {
    	float u;			//Deklarierungen
    	float P;
    	float r;
    	float f;
    	int a;				//a für Auswahl
    
    	P = 3.141592;		//Definierung Pi
    
    	cout << "Was wollen sie berechnen?" << endl;
    	cout << "1: Umfang" << endl << "2: Fläche" << endl;
    	cin >> a;
    
    	if (a == 1)
    	{
    		cout << "Sie haben Umfang gewählt." << endl;
    		cout << "Geben sie den Radius ein:" << endl;
    		cin >> r;
    		u = 2 * r * P;
    		cout << "Der Umfang beträgt:" << u << endl;
    	}
    
    	if (a == 2)
    	{
    		cout << "Sie haben Fläche gewählt." << endl;
    		cout << "Geben sie den Radius ein:" << endl;
    		cin >> r;
    		f = r * r * P;
    		cout << "Die Fläche beträgt:" << f << endl;
    	}
    	return 0;
    
    }
    

    fertig ist mein Kreisrechner 🕶
    jetzt mach ich noch mehr funktionen dazu...


Log in to reply