Ist float schneller als double?



  • Hallo!
    Da float ja weniger nachkommastellen hat, denke ich, dass er schneller als double sein sollte. Oder wie ist es bei .NET?



  • Wie wäre es wenn du selbst ein paar Tests machst?



  • Grundsätzlich ist float schneller als double.

    Ausser wenn double schneller ist als float.
    Oder gleich schnell.

    😃



  • Das stimmt.



  • hustbaer schrieb:

    Grundsätzlich ist float schneller als double.

    Ausser wenn double schneller ist als float.
    Oder gleich schnell.

    😃

    Würde ich so mal nicht verallgemeinern. Das kann auch andersrum sein.



  • 'schneller' ist der falsche Ausdruck.
    Eine variable des Typs double braucht mehr RAM als eine float-variable.
    Insofern wird mehr Arbeitsspeicher benutzt und ja, tatsaechlich,
    es dauert natuerlich laenger 8 Bytes zu lesen als 4.
    Allerdings ist das vollkommen irrelevant, denn beides geht so rasend schnell,
    dass es bei den paar Bytes, die Du hin- und herschubst einfach keine Rolle spielt.

    Wenn Du riesige Datenmengen verarbeitest und komplexe Berechnungen darauf ausfuehrst, hat es ggf. eine Effekt, aber dann sind Deine Kriterien auch wohl eher Praezision / akkurate Berechnung und nicht nur Geschwindigkeit.

    Aber ich unterstelle jemandem, der den Unterschied zwischen float und double noch nicht kennt, dass er solche Berechnungen nicht macht. Daher mach dir erstmal keine Gedanken darueber und entwickle Freude am Programmieren.

    Und ihr Zyniker, die ihr Euch lustig macht - ihr wusstet es doch irgendwann einmal auch noch nicht, oder?



  • Ich denke auch, dass es sich nicht viel geben wird float oder double.
    double braucht doppelt so viel Speicher. Aber da die Gleitkommaoperationen ja im FPU durchgeführt werden und der immer (zumindest war das mal so) mit 80 bit Genauigkeit rechnet, ist die Rechnung an sich gleich schnell/langsam.
    Nur das laden und speichern dauert halt evtl _etwas_ länger.
    (Ka, aber macht es auf einem 64-bit System ein Unterschied ob 32 oder 64 bit durch die Gegend geschoben werden? Ist ja ein Register...)



  • floats kann man mit SSE/SSE2 bearbeiten.
    double AFAIK nur mit SSE2, und nur 2 gleichzeitig (vs. 4 floats).

    von daher kann es schon einen merkbaren unterschied machen ob man float oder double nimmt. allerdings wohl eher selten, weil kaum ein programm sich gut dafür eignet von den leider-nicht-so-mächtigen vektorizern der diversen compiler in SSE/SSE2 code verbastelt zu werden.

    es sei denn natürlich man schreibt den code von hand mit SSE/SSE2 intrinsics.

    davon abgesehen macht es wohl einen grösseren unterschied, ob man die FPU im "single precision mode" fährt, oder im "double precision mode". natürlich macht es nicht so viel sinn im "single precision mode" zu fahren wenn man doubles verwendet. genausowenig wie es sinn macht, die FPU im "double precision mode" zu betreiben, und dann floats zu verwenden (EDIT2: OK, letzteres macht mehr sinn, da "double precision mode" halt default ist, und man will ja nicht was umstellen, worauf sich vielleicht andere programmteile verlassen).

    BTW: Direct3D schaltet die CPU defaultmässig in den "single precision mode" (und das nicht nur während D3D funktionen ausgeführt werden). d.h. wer Direct3D mit den default-flags verwendet, der hat nicht viel davon double zu verwenden.

    p.S.: er, ja, vergessen: gilt natürlich auch alles nur für x86 CPUs.

    EDIT: Arrrgh! C# Forum hier. Ich Doofsack. Nix mit compiler intrinsics 😃 Naja, what shells 🙂



  • Vielen Dank! 😃


Anmelden zum Antworten