Anzeige:
Ergebnis 1 bis 6 von 6

Thema: Konvertierung von 'double' in 'float'

  1. #1
    Registrierter Benutzer
    Registriert seit
    22.10.2006
    Beiträge
    76

    Konvertierung von 'double' in 'float'

    Mein Prg:

    Code:
    #include <stdio.h>
    #define Pi 3.14159265
    int main()
    {
    	float fRadius=0, fOberflaeche=0, fVolumen=0; 
    
    /* Eingabe und Ausgabe des Radiuses */
    	printf("Geben Sie den Radius der Kugel ein \n\n\n");
    	scanf(" %f", &fRadius);
    	printf("\n\n\n Der Radius betraegt: %0.2lf\n\n\n", fRadius);
    
    /* Berechnung und Ausgabe des Volumens */
    	fVolumen=(4.0/3.0)*(fRadius*fRadius*fRadius)*Pi;
    	printf("\n Das Volumen betraegt: %0.0lf\n\n\n", fVolumen);
    
    /* Berechnung und Ausgabe der Oberfläche */
    	fOberflaeche=4.0f*(fRadius*fRadius)*Pi;
    	printf("\n Die Oberflaeche betraegt: %0.1f\n\n\n\n\n\n\n\n" , fOberflaeche);
    
    return 0;
    }

    Warum erscheint in Bezug auf die roten Zeilen die folgende Warnung?


    Warnung:

    warning C4244: '=': Konvertierung von 'double' in 'float', möglicher Datenverlust

  2. #2
    Registrierter Benutzer Avatar von ContainerDriver
    Registriert seit
    10.01.2003
    Beiträge
    418
    Ich vermute, der Präprozessor ersetzt Pi durch den im define angegebenen Wert und der Compiler fasst das dann als double auf. Da float aber eine größere Mantisse und Exponenten hat und eine Umwandlung von double zu float vorgenommen wird, gibt der Compiler eine Warnung aus. Eventuell hilft ein

    Code:
    #define Pi 3.14159265f
    , oder du änderst den Datentypen der Variablen (und der Zahlen in den Rechnungen) zu double.
    Ein gebrechlich Wesen ist der X-Server.

  3. #3
    Registrierter Benutzer
    Registriert seit
    22.10.2006
    Beiträge
    76
    Bei
    Code:
    #define Pi 3.14159265f
    erscheint die gleiche Warnung noch für die letzte rot markierte Zeile.

    Für
    Code:
    double fRadius=0, fOberflaeche=0, fVolumen=0;
    werden sämtliche Ausgabewerte bei Eingabe des Radiuses (also im Prg) null.

  4. #4
    Registrierter Benutzer Avatar von Boron
    Registriert seit
    07.01.2002
    Beiträge
    827
    Wenn du Oberfläche, Radius und Volumen als double anlegst, dann solltest du im printf(...) auch double ausgeben. Vermutlich dann mit %0.0ld.
    Gruß Boron (der sich oft wegen mieser Rechtschreibung anderer die Augen reiben muss)

    LINUX IS LIKE AN INDIAN TENT: NO GATES, NO WINDOWS AND AN APACHE INSIDE!
    Hardware Monitoring unter Linux -> http://santafu.sourceforge.net (Temperaturen, Lüfterdrehzahlen und Spannungen)

  5. #5
    Registrierter Benutzer
    Registriert seit
    22.10.2006
    Beiträge
    76
    Mit deinem Vorschlag wird der Radius in der Ausgabe viel zu groß (größer als dessen Eingabe), das Volumen wird nicht ausgegeben und die Oberfläche ist null.

    Ich habe gerade herausgefunden dass das Ganze so funktioniert:

    Code:
    #include <stdio.h>
    
    int main()
    {
    	float fRadius=0;
    	double fOberflaeche=0, fVolumen=0, Pi=3.14159265; 
    
    /* Eingabe und Ausgabe des Radiuses */
    	printf("Geben Sie den Radius der Kugel ein \n\n\n");
    	scanf(" %f", &fRadius);
    	printf("\n\n\n Der Radius betraegt: %0.2lf\n\n\n", fRadius);
    
    /* Berechnung und Ausgabe des Volumens */
    	fVolumen=(4.0/3.0)*(fRadius*fRadius*fRadius)*Pi;
    	printf("\n Das Volumen betraegt: %0.0lf\n\n\n", fVolumen);
    
    /* Berechnung und Ausgabe der Oberfläche */
    	fOberflaeche=4.0f*(fRadius*fRadius)*Pi;
    	printf("\n Die Oberflaeche betraegt: %0.1lf\n\n\n\n\n\n\n\n" , fOberflaeche);
    
    return 0;
    }
    Allerdings würde ich auch gerne noch verstehen warum es so geht und anders (siehe erste Thread) nicht.

  6. #6
    Registrierter Benutzer Avatar von ContainerDriver
    Registriert seit
    10.01.2003
    Beiträge
    418
    Zitat Zitat von darxun Beitrag anzeigen
    Bei
    Code:
    #define Pi 3.14159265f
    erscheint die gleiche Warnung noch für die letzte rot markierte Zeile.
    Das ist auch richtig so!

    Code:
    /* Berechnung und Ausgabe der Oberfläche */
    	fOberflaeche=4.0f*(fRadius*fRadius)*Pi;
    	printf("\n Die Oberflaeche betraegt: %0.1f\n\n\n\n\n\n\n\n" , fOberflaeche);
    Schau da mal genau hin.

    EDIT: Stopp, das sollte eigentlich nicht die Warnung verursachen. Im moment weiß ich auch nicht, warum da noch eine Warnung angezeigt wird...
    Geändert von ContainerDriver (28-11-2007 um 17:27 Uhr)
    Ein gebrechlich Wesen ist der X-Server.

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •