Hallo
Sehe ich nicht so. Stell Dir mal vor, Du hast
10 Millionen 3D-GleitkommadatensÀtze. In nahezu
allen FĂ€llen reicht fĂŒr Positionsdaten ein âfloatâ,
durch Skalierung der âWeltâ (Werte hauptsĂ€chlich um 1.0)
kann man fĂŒr âfloatâ die höchste Genauigkeit herausschinden.
10^6 x 3 x 4 Byte => 120 MByte (float), 240 MByte (double)
Eine Funktion, die z.B. zwei x-Werte miteinander vergleicht,
um das Ergebnis einem (jetzt aber genaueren) Berechnungskernel
zuzufĂŒhren (return) mĂŒĂte in etwa so parametrisiert sein,
wie der OP das gemacht hat
double Ergebnis (float a, float b) {
**float** Summe = a + b;
/\* hier 100 weitere "schnelle" float-Berechnungen \*/
return Summe; /\* Konvertierung bei return fĂŒr Ergebnis-
Akkumulation \*/
}
Ansonsten wĂ€re es gĂŒnstiger, auch in den formalen Parameter
bereits nach double zu konvertieren, also
double Ergebnis (double a, double b) {
**double** Summe = a + b;
return Summe;
}
so wie Du das oben angemerkt hast.
Wenn man z.B. in CUDA rechnet, sind float-Rechnungen
bis zu 20 mal schneller als double-Rechnungen. Die
von CUDA ausgespuckten Ergebnisse wĂŒrde man dann
in âdoubleâ fĂŒr die Auswertung einsammeln.
Nur als Anmerkung.
GrĂŒĂe
CMĐ
[Bei dieser Antwort wurde das Vollzitat nachtrÀglich automatisiert entfernt]