kleines rätsel...



  • CStoll schrieb:

    und bei so großen Zahlen kann es durchaus vorkommen, daß sie nicht mehr exakt in einen double passen

    das wird ja von unsigned int wieder glatt gebügelt 🙂



  • _________________________ schrieb:

    CStoll schrieb:

    und bei so großen Zahlen kann es durchaus vorkommen, daß sie nicht mehr exakt in einen double passen

    das wird ja von unsigned int wieder glatt gebügelt 🙂

    Nein, wird's nicht - wenn bei der Umwandlung in double die letzte Stelle gerundet wurde, ist sie weg und kann bei der Rückumwandlung auch nicht zurückgeholt werden.



  • unsigned int abs_strangesome( double a )
    {
    	if ( a < 0 )
    		a *= -1;
    	return a;
    }
    
    int main()
    {
    	printf("%u\n", abs_frickelei(-2147483648) );
    	return 0;  
    }
    

    ausgabe, wer hätte das gedacht 😃
    2147483648



  • CStoll schrieb:

    ... wenn bei der Umwandlung in double die letzte Stelle gerundet wurde, ...

    IMHO werden die Stellen immer abgeschnitten, nie gerundet. Sonst müßte ja eine Stelle mehr ausgerechnet werden, als in das Zielformat paßt. Statistisch verschlimmert das ja auch den Fehler nicht ...



  • abs warrior schrieb:

    ausgabe, wer hätte das gedacht
    2147483648

    double ist doch doof. double kann eventuell viel zeit kosten. besser wäre 'long long' (das spinnt dann erst bei LLONG_MIN). aber was wirklich zickt, ist nicht der wertebereich, sondern das zweierkomplement-verfahren. mit einerkomplement gäbe es kein problem (nur hat man dann eben zwei nullen).
    🙂


Anmelden zum Antworten