Int in Float umwandeln und rundungsfehler angeben



  • hallo, ich hätte folgende frage:

    ich lerne grad c und musste bei einer aufgabe einen int-wert in einen float umwandeln. dabei passiert es ja, dass rundungsfehler auftauchen. der wert wird quasi nicht 1 zu 1 übergeben.
    mein programm sollte den rundungsfehler angeben. also hab ich folgendes abgetippt:

    #include <stdio.h>
    
    int main(void)
    {
    	int val1 = 123456789;
    	float val2 = val1;
    	float res;
    
    	printf("%f\n", val2);
    	printf("Der Rundungsfehler lautet\n: ");
    
    	res = val2- (int)val1;
    	printf("%f\n" , res);
    
    }
    

    ich hab bei der berechnung res = val2- (int)val1; die variable auf int gecastet, weil ich nicht wollte, dass val1 implizit auf float gecastet wird.
    aber irgendwie kommt da doch 0.00000 raus. ich verstehs auch nicht.

    was mache ich falsch?


  • Mod

    Es gibt keinen Rundungsfehler, das ist schon richtig. float kann Ganzzahlen (bis zu einer gewissen Größe) exakt darstellen. Deine Rechnung ist aber trotzdem Unsinn, denn auch mit dem Cast wird da doch eine Fließkommasubtraktion vorgenommen.



  • SeppJ schrieb:

    Es gibt keinen Rundungsfehler, das ist schon richtig. float kann Ganzzahlen (bis zu einer gewissen Größe) exakt darstellen. Deine Rechnung ist aber trotzdem Unsinn, denn auch mit dem Cast wird da doch eine Fließkommasubtraktion vorgenommen.

    Jop, der Cast ist an der falschen Stelle. http://ideone.com/WYXVN


  • Mod

    cooky451 schrieb:

    Jop, der Cast ist an der falschen Stelle. http://ideone.com/WYXVN

    Hehe, 123456789 passt ja tatsächlich schon nicht mehr in float. Ich sollte solche Behauptungen wie oben lieber nachrechnen, anstatt nur zu schätzen. float ist so ungewohnt kurz.


Anmelden zum Antworten