• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

[C++] math.c:pow() liefert zu grosse Zahl?

jeko

Lounge-Member
Hi Leute!

Ja, ungewöhnlich, ne C++-Frage. Also alle die damit nix am Hut haben [wollen], müssen ab hier nimmer weiterlesen.
Den anderen wär ich dankbar wenn sie sich das mal kurz anschauen und mir vielleicht helfen könnten....

Hab folgenden Source... (Ausschnitt)
Code:
(..)
#include <math.h>
#include <string>
#include <stdlib.h>
(...)

string init_array(char *eingabe) {
	string az_klein = "abcdefghiklmnopqrstuvwxyz"; // 26 + 1
	string az_gross = "ABCDEFGHIKLMNOPQRSTUVWXYZ"; // 26 + 1
	string az_numbers = "0123456789"; // 10 + 1
	string temp = eingabe;
	string pool = "";
	if (temp.find("az",0) != string::npos) {
		pool += az_klein;
	}
	if (temp.find("AZ",0) != string::npos) {
		pool += az_gross;
	}
	if (temp.find("09",0) != string::npos) {
		pool += az_numbers;
	}
	if (temp == "ascii" || temp == "ASCII") {
		pool = "ASCII";
	}
	return pool;
}

string MD5decrypt(char *hash, char *laenge, char *zeichen) {
	string ret = ""; // Aktueller Wert des generierten Strings IMPORANT
	string npool = init_array(zeichen); // Pool mit Zeichenvorrat generieren IMPORTANT
	string::size_type len = npool.length();
	char* cs;
	double zaehler, temp = 0,; // Hauptzaehler, Total Moeglichkeiten IMPORTANT
	double total  = pow(atol(laenge)+1,int(len));
	cout << "Laenge: " << atoi(laenge);
	cout << "\nZaehler initialisiert: " << total << " Moeglichkeiten " << sizeof(total) << "Bytes";
	if (npool == "") {
		return "\nFehler beim initialisieren des Zeichenvorrats: Ungueltige Bereichsangabe.\n";
	}
(...)

Nun ist 'total' bei einer laenge von '1' und einem len-Wert von '25' irgendwie bei 3.35544e+007 ???
Das heisst laut dem Prog ist pow(2,25) also 25*25 gleich 3.35544e+007. Das kann aber ned sein, oder?

Wisst ihr warum? Eigentlich sollte total ja bei laenge=1 und len=25 676 ergeben??? Ich versteh aber echt nicht warum und der Compiler meckert nicht mal Ansatzweise!

wär echt dankbar für nen Lösungsansatz, merci :)

jeko
 
Zitat aus der Man Page von Linux zur Funktion pow ():
DESCRIPTION
The pow() function returns the value of x raised to the power of y.

Nach Eingabe von 2 hoch 25 kommt auf meinem Offline-Taschenrechner 33554432 raus, ein Ergebnis welches man auch als 3.35544+7 schreiben kann.

Das Programm arbeitet in diesem Punkt also völlig korrekt.
 
Achso...Ich idiot...Potenzrechnen nochma lernen...

Also die Argumente vertauschen :idea:

Code:
double total  = pow(int(len),atol(laenge)+1);
Dankesehr... so einfach kanns sein... :rolleyes:
 
Zurück
Oben