Floatzahlen größenvergleich

snow-master

Grünschnabel
Floatzahlen größenvergleich E: neues Prob: Fehlermeldung

Ich muss für mein Studium einen Infobeleg schrieben der zu 95% fertig ist aber ich kann nich fragen ob z.B. x > y ist wenn sie vom Dateityp float sind, leider könnte ich das gut gebrauchen oder ich müsste mein Prog auf integer Werte umschrieben und das Ergebnis als Bruch ausgeben was ich aber nich unbedingt wollte (jaja ich weiß das is eh genauer bei der Aufgabe aber ich habe jetzt schonmal einmal so angefangen ^^)

MfG Snow!

Edit: weiter unten steht jetzt ne andere Frage ;)
 
Zuletzt bearbeitet:
mein C++ Compiler bring da ne Fehlermeldung:

A, ich hab ausversehen << statt < genommen und da kam dann: geht nich da vom Typ float :)

Edit: neues Prob ich hab bei

x1=2*pow(2,2*(n-1))

die Fehlermeldung: 7 Überladungen haben ähnliche Konvertierungen

error C2666: 'pow': 7 Überladungen haben ähnliche Konvertierungen
c:\Programme\Microsoft Visual Studio .NET 2003\Vc7\include\math.h(620): kann 'long double pow(long double,int)' sein
c:\Programme\Microsoft Visual Studio .NET 2003\Vc7\include\math.h(618): oder 'long double pow(long double,long double)'
c:\Programme\Microsoft Visual Studio .NET 2003\Vc7\include\math.h(572): oder 'float pow(float,int)'
c:\Programme\Microsoft Visual Studio .NET 2003\Vc7\include\math.h(570): oder 'float pow(float,float)'
c:\Programme\Microsoft Visual Studio .NET 2003\Vc7\include\math.h(534): oder 'double pow(int,int)'
c:\Programme\Microsoft Visual Studio .NET 2003\Vc7\include\math.h(532): oder 'double pow(double,int)'
c:\Programme\Microsoft Visual Studio .NET 2003\Vc7\include\math.h(195): oder 'double pow(double,double)'
bei Anpassung der Argumentliste '(int, float)'
 
Zuletzt bearbeitet:
Heyhey, so gut bin ich in C++ auch noch nich ^^ was is casten? einfach immer float davor schrieben? sind alles floatzahlen die ich definiert habe...
 
Es geht noch einfacher. Die Mathematik Funktionen gibts alle in mehreren Ausführungen. (Je nach Variablen-Typ) für float nutze einfach powf
 
Hi.

Also eigentlich ist es ja ein Feature von C++ das man Funktionen überladen kann - so das man nicht mehr wie in C mehrere Versionen für verschiedene Typen mit unterschiedlichen Namen ansprechen muß. Dabei muß muß nur drauf achten das möglichst beide Typen gleich sind oder nicht-mehrdeutige Konvertierungen zu den spezifierten Typen haben.

Der Compiler hat dich darauf hingewiesen, das die Typen deines pow Aufrufs (int, float) ist. Und er hat auch die Möglichkeiten aufgelistet die es gibt:

long double pow(long double,int)
long double pow(long double,long double)
float pow(float,int)
float pow(float,float)
double pow(int,int)
double pow(double,int)
double pow(double,double)

Wie du siehst, gibt es keine pow(int, float) Funktion, d.h. ein Argument muß in einen anderen Typ überführt werden. Bloß welches? Das kann der Compiler nicht (für dich) entscheiden. Du mußt sagen was du willst:

double pow(int, int)

oder lieber

float pow(float, float) ? ;)

Du mußt dabei auch nicht unbedingt casten, du mußt nur für beide Argumente float Werte angeben:
Code:
x1=2*pow(2.f,2*(n-1))

Gruß
 
Aber bei der Variablen deklaraition habe ich doch extra alle Variabelen als float deklariert da ich nich überlegen wollte welche evtl nur als integer zu gebrauchen sind. Also habe ich ja

pow(float,float)

geschrieben und nur float vor das pow() schreiben hat ja auch nix gebracht, das mit dem powf() scheint zu funktionieren, is jetzt nur nich mehr die richtige Zeit um auf Fehlersuche zu gehen ;)
 
Du hast zwar alle Variablen als float deklariert, aber du hast auch ein Integer-Literal in dem Aufruf von pow verwendet. Schau dir nochmal genau den Unterschied an:
Code:
x1=2*pow(2  ,2*(n-1));
x1=2*pow(2.f,2*(n-1));

Gruß
 
Zurück