C++ Warum sind im Code geschriebene Zahlen double

UeB

Admiral Special
Mitglied seit
25.05.2002
Beiträge
1.084
Renomée
3
Standort
Stuttgart
ich habe ein numerisches Programm geschieben. Damit es einfach ist zwischen den verschiedenen Genauigkeiten von Gleitkommazahlen zu wechseln gibt es ein:

Code:
typedef double Real;

nachdem ich dann diese Zeile durch

Code:
typedef long double Real;

ersetzt habe, gab es aber Probleme mit diesem Code:
Code:
Real dRho1 = rho[i][t] - rho[i-1][t];
Real dU1 = u[i][t] - u[i-1][t];
Real dP1 = p[i][t] - p[i-1][t];
		
Real dRho2 = rho[i+1][t] - rho[i][t];
Real dU2 = u[i+1][t] - u[i][t];
Real dP2 = p[i+1][t] - p[i][t];
		
dRho[i] = max( 0.0, min( parameter*dRho2, max( dRho1, min( dRho2, parameter*dRho1 ))))
	 +min( 0.0, max( parameter*dRho2, min( dRho1, max( dRho2, parameter*dRho1 ))));
		
dU[i] = max( 0.0, min( parameter*dU2, max( dU1, min( dU2, parameter*dU1 ))))
       +min( 0.0, max( parameter*dU2, min( dU1, max( dU2, parameter*dU1 ))));
		
dP[i] = max( 0.0, min( parameter*dP2, max( dP1, min( dP2, parameter*dP1 ))))
       +min( 0.0, max( parameter*dP2, min( dP1, max( dP2, parameter*dP1 ))));

da die Funktionen min bzw. max 2 gleiche Argumente verlangen.
allerdings behandelt mein Compiler (g++) die fesetreingeschriebenen 0.0 als double.

natürlich kann ich ein "workaround" machen mit:
Code:
const Real null = 0.0;

aber es gibt doch auch sicher irgendwelche Preprozessor Anweisungen oder compiler flags mit denen man den Typ von festreingescheibenen Werten festlegen kann.
 
Zuletzt bearbeitet:
Ich glaube nicht, dass es da etwas gibt. So schlecht ist der workaround doch nicht, es ist eigentlich sogar der bessere Stil. ;)
 
pack vor das 0.0 einen cast nach Real, also "(Real) 0.0". Floats musst du wie folgt kennzeichnen: 0.0f -> float, 0.0 -> double, 0.0F -> long double.
 
Auf welchem System ist long double eigentlich 80bit? Habe es gerade auf WinXP (Athlon64) getestet und es ist 64bit wie auch double.
 
Zurück
Oben Unten