Warum sind ints auf meinem 64-Bit Rechner 32 Bit?



  • Topic == Frage...
    Weil, müssten 64-Bit ints nicht schneller sein?
    Oder ist das derartige Platzverschwendung?
    Ich weiß das das Kompilerabhängig ist, getestet hab ich gcc mit Standardeinstellungen.

    /edit: Ich hab grad ein bisschen bei codewprx gestöbert. Da steht auch irgendwo, dass man 1.25f schreiben soll statt 1.25 wenn man mit floats rechnen will, weil 1.25 als double interpretiert wird. Das ist ja klar, mir nur der Ratschlag nicht.

    float a=2.25;
    void mach_was(float);
    mach_was(2.25);
    //...
    

    Hier ist dem Kompiler doch immer bekannt was erreict werden soll, der sollte das also wohl selber umändern, oder?



  • AFAIK müssen sie das laut Standard nicht.

    Bye, TGGC \-/



  • Das sie das nicht müssen ist mir klar...
    War halt nur sone Überlegung, angestoßen durch das.


  • Mod

    auf der seite steht auch einiger unfug (einiges ist auch brauchbar), besonders das hier fällt auf:

    - b/a + c/a = (1/a) * (b+c); Hier ersetzt man zwei Divisionen durch eine Division und einer Multiplikation. Da multiplizieren schneller ist als dividieren, spart man ein bisschen Prozessorzeit.

    aua. 32bit ist für x64 trotzdem die standardgrösse für ints, weil es schneller ist. 64bit arithmetik ist nur fast so schnell. ausserdem braucht es etwas mehr code.



  • Hem, also eigentlich muß du das dem Compiler mitteilen, wenn er es nicht autom. macht. Unter VC++ kann ich das ganze auch nur optional machen, das er es für 64bit compiliert. Habe jedoch keinen 64bit-Prozi, so das ich dir da keine wirkliche Hilfe geben kann.



  • Naja, wenns mal darauf ankommt kann ich ja gucken, ob das nen Unterscjied macht...



  • ness schrieb:

    /edit: Ich hab grad ein bisschen bei codewprx gestöbert. Da steht auch irgendwo, dass man 1.25f schreiben soll statt 1.25 wenn man mit floats rechnen will, weil 1.25 als double interpretiert wird.

    Es stimmt erstmal, dass 1.25f ein float Literal und 1.25 ein double Literal ist. Aber nicht immer ist eine Unterscheidung notwendig, ich schreibe auch lieber 1.25 als 1.25f. Man sollte aber zB bei überladenen Funktionen darauf achten

    void foo(float);
    void foo(double);
    

    Hier macht es schon einen Unterschied, was man schreibt.
    Zudem sollte man auf den Verlust von Genauigkeit achten. Deshalb werden die meisten Compiler dann auch Warnungen ausgeben. Bei 1.25 ist das zB nicht der Fall, da dieses Literal ohne Genauigkeitsverlust in float umgewandelt werden kann, denn es ist
    1+141+\frac{1}{4}
    Bei zB 1.3 sieht das dann aber schon anders aus.


Anmelden zum Antworten