Wie Genauigkeit von Zahlendarstellung durch float und double darstellen



  • Hallo
    ich stehe mal wieder vor einem problem und weiß nicht wie es angehen soll
    ich habe folgende aufgabe:

    Erstellen Sie eine Funktion, mit deren Hilfe Sie die Genauigkeit der Zahlendarstellung durch die Fließkommaformate float und double eruieren können. Die Genauigkeit soll durch die Anzahl der Stellen definiert werden, die korrekt angegeben werden.

    nur hab ich leider keine idde wie ich da rangehen soll...vll könnt ihr mir ja ein wenig auf die sprünge helfen

    mfg



  • Einfachste Möglichkeit - du liest die entsprechenden Makros aus der <limits.h> aus 😃

    Wenn du es etwas komplexer haben willst, wandle eine entsprechend lange Zahl von String nach double und zurück und schau dir an, wo Unterschiede auftreten.



  • mhhh aber es soll ja irgendeine funktion werden die das ganz irgendwie berechnen soll...und da hab ich keine ahnung wie ich da anfangen soll



  • vergleich doch die längen der mantissen beider float-typen. 2^die_differenz müsste dan den unterschied in der genauigkeit ausmachen (schätze ich mal).
    🙂



  • ehhhm und wie mach ich das?bei der matissenberechnung hab ich leider nicht so gut aufgepasst



  • --> http://en.wikipedia.org/wiki/IEEE_754
    🙂
    -------------
    -------------
    -------------
    -------------
    -------------
    -------------
    -------------
    -------------
    -------------
    -------------
    -------------
    -------------
    -------------



  • ich komm einfach nicht klar mit den scheiß matissen...gibt es noch ne andere möglichkeit?



  • Wie gesagt - nimm dir einen (fast) beliebigen Wert (0.1 könnte recht brauchbar sein) und jag' ihn durch sprintf() mit ausreichend hoher Präzissionseinstellung, dann kannst du vergleichen, bis wohin die Ausgabe genau ist.

    und die einfachste Variante:

    #include <limits.h>
    int float_digits()
    { return FLT_DIG; }
    int double_digits()
    { return DBL_DIG; }
    


  • wie änder ich die präzisionseinstellungen von printf?
    könnte ich z.B. einen wert auch immer wieder teilen oder multiplizieren bis der bereich überschrittenwurde,nebenbei lass ich nen zähler oder so laufen und so kann ich dann mit den wert bis kurz vor die bereichsüberschreitung und habe dan die genauighkeit?
    würde sowas gehen?wenn nicht kannst du mal quelltext aufschreiben wie dus meinst?

    mfg



  • #include <stdio.h>
    
    int main ()
    { 	
    	int fltDig = 0, dblDig = 0;
    	float fltOffset = 1.0f;
    	double dblOffset = 1.0;
    	float fltValue = 1.0f + fltOffset;
    	double dblValue = 1.0 + dblOffset;
    
    	while(fltValue > 1.0f) {
    		fltOffset /= 10.0f;
    		fltDig++;
    		fltValue = 1.0f + fltOffset;
    	}
    
    	while(dblValue > 1.0) {
    		dblOffset /= 10.0;
    		dblDig++;
    		dblValue = 1.0 + dblOffset;
    	}
    
    	printf("float: %d, double: %d \n", fltDig, dblDig);		
    	return 0;
    }
    


  • Braineater schrieb:

    wie änder ich die präzisionseinstellungen von printf?

    In den Formatkennungen - sprintf("%.10f",val); gibt die Zahl mit 10 Nachkommastellen aus (Default ist 6).


Anmelden zum Antworten