float vs double



  • Oh my fucking God?

    Ich werde das halt mit meinen eigenen Routinen testen, und wenn sich irgendein Unterschied auftut, werde ich mich entsprechend entscheiden. Und damit wird dieses Thema für mich ausreichend behandelt sein. Danke.



  • @lemon03 sagte in float vs double:

    Ich werde das halt mit meinen eigenen Routinen testen, und wenn sich irgendein Unterschied auftut, werde ich mich entsprechend entscheiden.

    👍



  • BTW: Man muss die Werte nicht unbedingt ausgeben. Wenn die Variable wo man das Ergebnis reinschiebt volatile ist reicht das. Schreiben von volatile Zeugs gilt als beobachtbar, auch wenn es in Wirklichkeit gar nicht beobachtbar ist. Also z.b. auch wenn die Variable lokal ist und der Scope der Variable direkt nach der Zuweisung endet. Compiler halten sich trotzdem daran.



  • @lemon03 sagte in float vs double:

    @swordfish sagte in float vs double:

    Borland C++ 3.1
    

    Aha. 1992? 😃

    Und man kann davon ausgehen, das solche Compiler noch regelmäßig genutzt werden? Weil sonst, verzeiht mir die Feststellung, alle bisherigen Antworten bis der von Burkhi obsolet wären?

    Ist float vs double also nur eine Stil-Frage?

    Eher wohl eine Frage der benötigten Genauigkeit.😉



  • Was die Performance angeht... das kann je nach CPU total unterschiedlich gehen. Folgende Faktoren spielen da mit

    • Wie @TGGC schon geschrieben hat die Speicherbandbreite - wenn das der limitierende Faktor ist, ist klar dass man mit float schneller ist als mit double weil float nur 1/2 so viel Speicher braucht.
    • Die Vektorregister und der Befehlssatz. Oft werden die selben Vektorregister für single- und double-precision verwendet, wobei man mit single-precision nur 1/2 so viele Werte in ein Register reinbringt wie mit double. Also z.B. ein Register mit entweder 8x float oder 4x double. Die Befehle arbeiten dann immer mit nem ganzen Register, d.h. man bekommt dann pro Befehl entweder 8 oder halt nur 4 Operationen. Wenn genügend Rechenwerke zu Verfügung stehen die die jeweilige Operation beherrschen dann kann das der limitierende Faktor sein.
    • Die Rechenwerke der CPU. CPUs haben typischerweise mehrere Rechenwerke die jeweils mehrere Operationen beherrschen und entweder single oder double-precision sein können. Wobei die double Rechenwerke typischerweise auch für single-precision verwendet werden können. Wenn die CPU jetzt z.B. nur zwei double-precision Rechenwerke hat die dividieren können aber zusätzlich noch zwei single-precision Rechenwerke die dividieren können, und man viel dividiert, dann ist auch klar dass man mit single-precision mehr Performance bekommen wird.
    • Je nach Programm kann die Latenz eines Befehls mehr oder weniger wichtig sein. Also die Zeit die benötigt wird bis das Ergebnis feststeht. Wenn man Rechenoperationen hat wo immer das Ergebnis der einen Operation ein Input für die nächste ist, dann spielt die Latenz eine grössere Rolle als wenn die Berechnungen unabhängig sind. (In mehreren Rechenwerken können ja mehrere unabhängige Berechnungen nebeneinander her laufen.) Und bei manchen Operationen ist die unterschiedlich für single- und double-precision. Speziell die mittel aufwendigen Operationen wie z.B. multiplizieren oder dividieren können da betroffen sein.

    Und dann spielt natürlich mit rein wie das Programm aussieht, welchen Compiler man verwendet, ob man in mehreren Threads parallel rechnet oder nicht usw.

    Hier https://en.wikipedia.org/wiki/FLOPS gibt's ne schöne Tabelle aus der man entnehmen kann dass es kaum CPUs gibt bei denen single- oder double-precision keinen Unterschied macht. Meist ist der maximale Durchsatz bei double-precision 1/2 vom maximalen Durchsatz bei single-precision -- oft auch noch weniger.


Anmelden zum Antworten