exe schaft unterschiedliche Erg. auf verschieden rechnern???

Dein Thema passt einfach in kein Forum? Dann probiers mal hier.
Antworten
24dan
Beiträge: 274
Registriert: 26. Juni 2006 14:15
Wohnort: Hamburg

exe schaft unterschiedliche Erg. auf verschieden rechnern???

Beitrag von 24dan »

Hallo ich habe ein Divisionsprogramm für grossstellige ganzzahlen geschrieben.

Jetzt erhalte ich auf meinem Notebook ein anderes Ergebnis als auf dem eines Freundes. (beides XP, Pentium, auf beiden QT4 kompiliert)

Wie kann das zustande kömmen?

Ich verwende modulo und habe die divison als schriftliche nachgebaut:
Hier mein Quelltext:

Code: Alles auswählen

/*################################################
	function:		division_big ( )
	assignment:		division
	parameter:		int i_ptr = pointer of the value that has to be divide 
					int i_len = count of the value that has to be divide 
	return:			pointer of the results or err_nr
#################################################*/
void division_big(RESULTS *res, int *i_ptr, int i_len, std::ostream& outfile)
{
	int divisors [11] = {3,4,5,7,11,12,13,17,19,37,73}, *i_ptr_divisors;
	i_ptr_divisors = divisors;
	int *start_arr;
	start_arr = i_ptr;
	int* i = new int(0);
	int* j = new int(1);	
	
	do{
		i_ptr = start_arr;			// pointer vom Anfang der Zahl die diviert wird 
		int k, i_log, i_erg, i_x ,i_rest=0;

		for ( k=0; k<i_len; k++, i_ptr++)
		{
			i_log = log10( *i_ptr )+1;		//	log10 gibt mir die Stellen der aktuellen Zahl aus; x<1 -> x=1
			i_x = pow ( 10, i_log-1 );
			if (  *i_ptr == 0)
				i_log = 1;
			i_erg = (  *i_ptr + pow ( 10, i_log ) * i_rest );	//	zum Teilerg. wird der rest von der letzten divison hinzuaddiert
			
			i_rest = i_erg%*i_ptr_divisors;			//	rest ermitteln
		}
		if (i_erg%*i_ptr_divisors == 0) {
			switch (*i_ptr_divisors){
					case (3):	res->results += "3,"; break;
					case (4):	res->results += "4,"; break;
					case (5):	res->results += "5,"; break;
					case (7):	res->results += "7,"; break;
					case (11):	res->results += "11,"; break;
					case (12):	res->results += "12,"; break;
					case (13):	res->results += "13,"; break;
					case (17):	res->results += "17,"; break;
					case (19):	res->results += "19,"; break;
					case (37):	res->results += "37,"; break;
					case (73):	res->results += "73"; break;
			}
			*j = 2;		//	set switch if somehow value is selected
		}
		*i +=1;
		i_ptr_divisors++;
	} while( *i < 11);

	if ( *j==1) res->results += "0"; //	set zero if nothing is selected or the value is zero

	*j = res->results.rfind(",");	//	to erase the last comma	
	*i = res->results.length();
	if (*j != -1) if ( (*i-*j) ==1 ) res->results.erase( *j, *i);
	delete i;
	delete j;
	outfile<<setfill(' ')<<setw(20)<<left<<res->results;
}	
Zuletzt geändert von 24dan am 15. Oktober 2006 14:36, insgesamt 3-mal geändert.
"Der erste Trunk aus dem Becher der Naturwissenschaften macht atheistisch, aber auf dem Grund des Bechers wartet Gott."
(W. Heisenberg)
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Sorry, aber ich seh' da keinen Bezug zu QT. Du verwendest weder Qt-Funktionen noch Qt-Container. Mal davon abgesehen, gibt es fertige Bibliotheken für große Zahlen (CLN und GMP z.B.)
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

upsala hat geschrieben:Sorry, aber ich seh' da keinen Bezug zu QT.
stimmt,

zumal er nicht gesagt hat was nun rauskommt (und was rauskommen soll) und ob es ggf. ein Pentium mit FDIv -Bug ist...
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
24dan
Beiträge: 274
Registriert: 26. Juni 2006 14:15
Wohnort: Hamburg

Beitrag von 24dan »

upsala hat geschrieben:Sorry, aber ich seh' da keinen Bezug zu QT. Du verwendest weder Qt-Funktionen noch Qt-Container. Mal davon abgesehen, gibt es fertige Bibliotheken für große Zahlen (CLN und GMP z.B.)
Hallo und vielen Dank für die Antwort...
ich habe mich an das QT Forum gewandt da ich die Gui in die ich meine c/c++ files mit einbinde in QT4 geschrieben habe und dort dann auch kompiliere.

Mir ist nicht klar wie ich im Assistant für QT4 den Kopf von Class Library for Numbers (CLN) finde? Beim "Suchen" wirft er mir nur Bruchstücke von Funktionen raus die mir zu dem Thema nicht passend scheinen.

Über GMP (GNU MP arbitrary precision arithmetic library) habe ich im Assistant auch nichts gefunden.

Fazit:
Ich bin sehr froh über jede Hilfe die mir das Problem erklärt und zur Lösung beiträgt.

Eine konkrete Frage: Wie kann ich den die Funktion umschreiben? Welche Funktionen verwende ich konkret.

Hier nochmals die Zahl die ich teile und die Ergebnisse in der einfachen Folge und im Kehrwert der Zahl auf Rechner A und B

Zahl:

Code: Alles auswählen

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
Ergebnisse auf Rechner A

Code: Alles auswählen

Einfach: 4  Kehrwert: 7

Ergebnisse auf Rechner B

Code: Alles auswählen

Einfach: 12  Kehrwert: 0
Die verwendeten Divisoren sind:
3,4,5,7,11,12,13,17,19,37,73

Bin für jede Hilfe offen...
"Der erste Trunk aus dem Becher der Naturwissenschaften macht atheistisch, aber auf dem Grund des Bechers wartet Gott."
(W. Heisenberg)
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

CLN und GMP sind externe Bibliotheken und haben eigentlich auch nichts mit Qt zu tun.[/url]
BartSimpson
Beiträge: 1379
Registriert: 6. November 2004 12:03
Kontaktdaten:

Beitrag von BartSimpson »

Mit CLN dürfte es schwierig werden, da es nicht ohne weiteres unter seinem beschriebenen Windows läuft.
Die GMP Seite scheint irgenwie tot zu sein.
24dan
Beiträge: 274
Registriert: 26. Juni 2006 14:15
Wohnort: Hamburg

Beitrag von 24dan »

BartSimpson hat geschrieben:Mit CLN dürfte es schwierig werden, da es nicht ohne weiteres unter seinem beschriebenen Windows läuft.
Die GMP Seite scheint irgenwie tot zu sein.
Danke. Okay Fazit:

1. Ich kann die Bibliotheken nicht mal eben so nutzen.
2. Ihr habt auch keine Ahnung warum da unterschiedliche Ergebnisse zustande kommen?
3. Wo könnte ich denn Fehler gemacht haben?
( Ich habe jetzt schon alle verwendeten Pointer in der Divison ersetzt durch einfache int variablen)

Vielen Dank für Eure Hilfe.
"Der erste Trunk aus dem Becher der Naturwissenschaften macht atheistisch, aber auf dem Grund des Bechers wartet Gott."
(W. Heisenberg)
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Bau doch einfach mal ein paar Debug-Ausgaben ein...
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
24dan
Beiträge: 274
Registriert: 26. Juni 2006 14:15
Wohnort: Hamburg

Beitrag von 24dan »

Christian81 hat geschrieben:Bau doch einfach mal ein paar Debug-Ausgaben ein...
Okay und es hat geholfen den Fehler konkret fest zu machen:


Hier mal das Zwischenergebnisse nachdem ich den Quelltext wie folgt abgewandelt habe:

Code: Alles auswählen

...stuff
	do{
		i_divisors = divisors[t];
		i_ptr = start_arr;			
		int k, i_log, i_erg, i_rest=0;
		outfile<<endl<<"divisor "<<i_divisors<<endl;	
		for ( k=0; k<i_len; k++, i_ptr++)
		{
			i_log = log10(*i_ptr)+1;		
			if ( *i_ptr == 0) i_log = 1;
			i_erg = (*i_ptr + (pow ( 10, i_log ) * i_rest ));			 
outfile<<"("<<i_erg<<")";

			i_rest = i_erg%i_divisors;
			outfile<<i_rest<<" ";
		}
...stuff
Folgende Zahl habe ich durch 3 geteilt:

Code: Alles auswählen

4 90 5 9 8 9 30 6 5 50 7 9 2 200 5 100 300 40 4 9 5 500 1 8 90 8 5 9 200 800 300 5 90 20 5 50 50 5 50 300 50 4 400 9 5 90 2 5 4 9 50 7 300 50 7 5 50 100 9 50 4 800 300 2 5 1 3 8 200 5 50 300 40 100 9 5 800 300 5 90 6 1 8 90 5 50 4 5 50 50 5 100 100 200 5 8 200 7 5 100 3 8 90 9 5 2 5 50 9 8 90 500 5 90 4 5 200 40 9 3 8 100 300 3 8 5 50 300 50 4 6 9 50 4 5 50 4 5 50 50 500 5 50 50 9 8 90 40 9 3 8 400 60 50 7 1 50 800 5 40 8 5 90 800 5 50 100 300 3 8 5 50 500 5 90 4 5 200 100 60 500 9 30 30 9 3 8 40 9 3 8 400 60 50 5 300 3 8 6 9 50 4 5 50 30 1 100 100 5 50 300 50 4 500 5 90 4 5 40 300 5 200 9 7 9 100 200 100 9 5 8 5 4 5 40 7 5 2 5 9 3 8 40 5 9 50 5 7 50 1 4 5 100 70 90 9 3 8 200 4 5 90 8 5 90 90 300 50 4 4 5 90 90 300 6 4 5 100 7 5 9 100 200 5 100 1 50 10 5 50 5 4 9 5 9 40 200 60 4 5 100 9 50 4 9 100 200 4 9 5 100 5 90 50 1 8 200 5 300 3 8 800 300 7 60 200 200 100 60 50 1 8 200 5 90 100 9 3 8 800 300 5 300 3 8 300 50 4 4 5 90 1 40 200 1 7 5 500 1 50 4 5 30 200 4 5 90 100 200 60 5 100 100 200 100 9 3 8 50 9 3 8 200 4 5 50 50 5 100 9 100 200 4 1 100 30 9 3 8 200 9 50 9 8 40 100 60 500 1 5 8 30 5 90 5 3 8 200 4 300 40 5 50 100 3 8 4 1 100 9 100 200 4 5 100 200 1 7 5 100 100 200 300 50 4 5 300 50 4 50 9 3 8 200 4 9 5 800 5 9 200 4 5 90 50 1 3 8 200
Hier die Ergebnissausgabe mit debug Ergebnis aus i_erg und dem Rest nach der Division:
[Gerechnet auf Maschiene A]

Code: Alles auswählen

divisor 3
(4)1 (190)1 (15)0 (9)0 (8)2 (29)2 (230)2 (26)2 (25)1 (150)0 (7)1 (19)1 (12)0 (200)2 (25)1 (1100)2 (2300)2 (240)0 (4)1 (19)1 (15)0 (500)2 (21)0 (8)2 (290)2 (28)1 (15)0 (9)0 (200)2 (2800)1 (1300)1 (15)0 (90)0 (20)2 (25)1 (150)0 (50)2 (25)1 (150)0 (300)0 (50)2 (24)0 (400)1 (19)1 (15)0 (90)0 (2)2 (25)1 (14)2 (29)2 (250)1 (17)2 (2300)2 (250)1 (17)2 (25)1 (150)0 (100)1 (19)1 (150)0 (4)1 (1800)0 (300)0 (2)2 (25)1 (11)2 (23)2 (28)1 (1200)0 (5)2 (250)1 (1300)1 (140)2 (2100)0 (9)0 (5)2 (2800)1 (1300)1 (15)0 (90)0 (6)0 (1)1 (18)0 (90)0 (5)2 (250)1 (14)2 (25)1 (150)0 (50)2 (25)1 (1100)2 (2100)0 (200)2 (25)1 (18)0 (200)2 (27)0 (5)2 (2100)0 (3)0 (8)2 (290)2 (29)2 (25)1 (12)0 (5)2 (250)1 (19)1 (18)0 (90)0 (500)2 (25)1 (190)1 (14)2 (25)1 (1200)0 (40)1 (19)1 (13)1 (18)0 (100)1 (1300)1 (13)1 (18)0 (5)2 (250)1 (1300)1 (150)0 (4)1 (16)1 (19)1 (150)0 (4)1 (15)0 (50)2 (24)0 (5)2 (250)1 (150)0 (500)2 (25)1 (150)0 (50)2 (29)2 (28)1 (190)1 (140)2 (29)2 (23)2 (28)1 (1400)2 (260)2 (250)1 (17)2 (21)0 (50)2 (2800)1 (15)0 (40)1 (18)0 (5)2 (290)2 (2800)1 (15)0 (50)2 (2100)0 (300)0 (3)0 (8)2 (25)1 (150)0 (500)2 (25)1 (190)1 (14)2 (25)1 (1200)0 (100)1 (160)1 (1500)0 (9)0 (30)0 (30)0 (9)0 (3)0 (8)2 (240)0 (9)0 (3)0 (8)2 (2400)0 (60)0 (50)2 (25)1 (1300)1 (13)1 (18)0 (6)0 (9)0 (50)2 (24)0 (5)2 (250)1 (130)1 (11)2 (2100)0 (100)1 (15)0 (50)2 (2300)2 (250)1 (14)2 (2500)1 (15)0 (90)0 (4)1 (15)0 (40)1 (1300)1 (15)0 (200)2 (29)2 (27)0 (9)0 (100)1 (1200)0 (100)1 (19)1 (15)0 (8)2 (25)1 (14)2 (25)1 (140)2 (27)0 (5)2 (22)1 (15)0 (9)0 (3)0 (8)2 (240)0 (5)2 (29)2 (250)1 (15)0 (7)1 (150)0 (1)1 (14)2 (25)1 (1100)2 (270)0 (90)0 (9)0 (3)0 (8)2 (2200)1 (14)2 (25)1 (190)1 (18)0 (5)2 (290)2 (290)2 (2300)2 (250)1 (14)2 (24)0 (5)2 (290)2 (290)2 (2300)2 (26)2 (24)0 (5)2 (2100)0 (7)1 (15)0 (9)0 (100)1 (1200)0 (5)2 (2100)0 (1)1 (150)0 (10)1 (15)0 (50)2 (25)1 (14)2 (29)2 (25)1 (19)1 (140)2 (2200)1 (160)1 (14)2 (25)1 (1100)2 (29)2 (250)1 (14)2 (29)2 (2100)0 (200)2 (24)0 (9)0 (5)2 (2100)0 (5)2 (290)2 (250)1 (11)2 (28)1 (1200)0 (5)2 (2300)2 (23)2 (28)1 (1800)0 (300)0 (7)1 (160)1 (1200)0 (200)2 (2100)0 (60)0 (50)2 (21)0 (8)2 (2200)1 (15)0 (90)0 (100)1 (19)1 (13)1 (18)0 (800)2 (2300)2 (25)1 (1300)1 (13)1 (18)0 (300)0 (50)2 (24)0 (4)1 (15)0 (90)0 (1)1 (140)2 (2200)1 (11)2 (27)0 (5)2 (2500)1 (11)2 (250)1 (14)2 (25)1 (130)1 (1200)0 (4)1 (15)0 (90)0 (100)1 (1200)0 (60)0 (5)2 (2100)0 (100)1 (1200)0 (100)1 (19)1 (13)1 (18)0 (50)2 (29)2 (23)2 (28)1 (1200)0 (4)1 (15)0 (50)2 (250)1 (15)0 (100)1 (19)1 (1100)2 (2200)1 (14)2 (21)0 (100)1 (130)1 (19)1 (13)1 (18)0 (200)2 (29)2 (250)1 (19)1 (18)0 (40)1 (1100)2 (260)2 (2500)1 (11)2 (25)1 (18)0 (30)0 (5)2 (290)2 (25)1 (13)1 (18)0 (200)2 (24)0 (300)0 (40)1 (15)0 (50)2 (2100)0 (3)0 (8)2 (24)0 (1)1 (1100)2 (29)2 (2100)0 (200)2 (24)0 (5)2 (2100)0 (200)2 (21)0 (7)1 (15)0 (100)1 (1100)2 (2200)1 (1300)1 (150)0 (4)1 (15)0 (300)0 (50)2 (24)0 (50)2 (29)2 (23)2 (28)1 (1200)0 (4)1 (19)1 (15)0 (800)2 (25)1 (19)1 (1200)0 (4)1 (15)0 (90)0 (50)2 (21)0 (3)0 (8)2 (2200)1 
[Gerechnet auf Maschiene B]
Hier ist an Stelle 7 mit der Zahl 230 als Teilergebnis 229 angegeben was falsch ist da sollte nach:

Code: Alles auswählen

i_log = log10(*i_ptr)+1; *i_ptr = 30 
i_erg = (*i_ptr + (pow ( 10, i_log ) * i_rest )); i_rest = 2 

dass sollte für i_erg 230 nicht 229 ergeben.	
... Warum???

Code: Alles auswählen

divisor 3
(4)1 (190)1 (15)0 (9)0 (8)2 (29)2 (229)1 (16)1 (15)0 (50)2 (27)0 (9)0 (2)2 (2200)1 (15)0 (100)1 (1300)1 (140)2 (24)0 (9)0 (5)2 (2500)1 (11)2 (28)1 (190)1 (18)0 (5)2 (29)2 (2200)1 (1800)0 (300)0 (5)2 (290)2 (219)0 (5)2 (249)0 (50)2 (25)1 (150)0 (300)0 (50)2 (24)0 (400)1 (19)1 (15)0 (90)0 (2)2 (25)1 (14)2 (29)2 (249)0 (7)1 (1300)1 (150)0 (7)1 (15)0 (50)2 (2100)0 (9)0 (50)2 (24)0 (800)2 (2300)2 (22)1 (15)0 (1)1 (13)1 (18)0 (200)2 (25)1 (150)0 (300)0 (40)1 (1100)2 (29)2 (25)1 (1800)0 (300)0 (5)2 (290)2 (26)2 (21)0 (8)2 (290)2 (25)1 (150)0 (4)1 (15)0 (50)2 (249)0 (5)2 (2100)0 (100)1 (1200)0 (5)2 (28)1 (1200)0 (7)1 (15)0 (100)1 (13)1 (18)0 (90)0 (9)0 (5)2 (22)1 (15)0 (50)2 (29)2 (28)1 (190)1 (1500)0 (5)2 (290)2 (24)0 (5)2 (2200)1 (140)2 (29)2 (23)2 (28)1 (1100)2 (2300)2 (23)2 (28)1 (15)0 (50)2 (2300)2 (249)0 (4)1 (16)1 (19)1 (150)0 (4)1 (15)0 (50)2 (24)0 (5)2 (249)0 (50)2 (2500)1 (15)0 (50)2 (249)0 (9)0 (8)2 (290)2 (239)2 (29)2 (23)2 (28)1 (1400)2 (260)2 (249)0 (7)1 (11)2 (249)0 (800)2 (25)1 (140)2 (28)1 (15)0 (90)0 (800)2 (25)1 (150)0 (100)1 (1300)1 (13)1 (18)0 (5)2 (249)0 (500)2 (25)1 (190)1 (14)2 (25)1 (1200)0 (100)1 (160)1 (1500)0 (9)0 (30)0 (30)0 (9)0 (3)0 (8)2 (239)2 (29)2 (23)2 (28)1 (1400)2 (260)2 (249)0 (5)2 (2300)2 (23)2 (28)1 (16)1 (19)1 (150)0 (4)1 (15)0 (50)2 (229)1 (11)2 (2100)0 (100)1 (15)0 (50)2 (2300)2 (249)0 (4)1 (1500)0 (5)2 (290)2 (24)0 (5)2 (239)2 (2300)2 (25)1 (1200)0 (9)0 (7)1 (19)1 (1100)2 (2200)1 (1100)2 (29)2 (25)1 (18)0 (5)2 (24)0 (5)2 (239)2 (27)0 (5)2 (22)1 (15)0 (9)0 (3)0 (8)2 (239)2 (25)1 (19)1 (150)0 (5)2 (27)0 (50)2 (21)0 (4)1 (15)0 (100)1 (170)2 (290)2 (29)2 (23)2 (28)1 (1200)0 (4)1 (15)0 (90)0 (8)2 (25)1 (190)1 (190)1 (1300)1 (150)0 (4)1 (14)2 (25)1 (190)1 (190)1 (1300)1 (16)1 (14)2 (25)1 (1100)2 (27)0 (5)2 (29)2 (2100)0 (200)2 (25)1 (1100)2 (21)0 (50)2 (209)2 (25)1 (150)0 (5)2 (24)0 (9)0 (5)2 (29)2 (239)2 (2200)1 (160)1 (14)2 (25)1 (1100)2 (29)2 (249)0 (4)1 (19)1 (1100)2 (2200)1 (14)2 (29)2 (25)1 (1100)2 (25)1 (190)1 (150)0 (1)1 (18)0 (200)2 (25)1 (1300)1 (13)1 (18)0 (800)2 (2300)2 (27)0 (60)0 (200)2 (2200)1 (1100)2 (260)2 (249)0 (1)1 (18)0 (200)2 (25)1 (190)1 (1100)2 (29)2 (23)2 (28)1 (1800)0 (300)0 (5)2 (2300)2 (23)2 (28)1 (1300)1 (150)0 (4)1 (14)2 (25)1 (190)1 (11)2 (239)2 (2200)1 (11)2 (27)0 (5)2 (2500)1 (11)2 (249)0 (4)1 (15)0 (30)0 (200)2 (24)0 (5)2 (290)2 (2100)0 (200)2 (260)2 (25)1 (1100)2 (2100)0 (200)2 (2100)0 (9)0 (3)0 (8)2 (249)0 (9)0 (3)0 (8)2 (2200)1 (14)2 (25)1 (150)0 (50)2 (25)1 (1100)2 (29)2 (2100)0 (200)2 (24)0 (1)1 (1100)2 (229)1 (19)1 (13)1 (18)0 (200)2 (29)2 (249)0 (9)0 (8)2 (239)2 (2100)0 (60)0 (500)2 (21)0 (5)2 (28)1 (130)1 (15)0 (90)0 (5)2 (23)2 (28)1 (1200)0 (4)1 (1300)1 (140)2 (25)1 (150)0 (100)1 (13)1 (18)0 (4)1 (11)2 (2100)0 (9)0 (100)1 (1200)0 (4)1 (15)0 (100)1 (1200)0 (1)1 (17)2 (25)1 (1100)2 (2100)0 (200)2 (2300)2 (249)0 (4)1 (15)0 (300)0 (50)2 (24)0 (50)2 (29)2 (23)2 (28)1 (1200)0 (4)1 (19)1 (15)0 (800)2 (25)1 (19)1 (1200)0 (4)1 (15)0 (90)0 (50)2 (21)0 (3)0 (8)2 (2200)1 
Die Frage ist jetzt warum wird mir der Wert verhuntzt?
"Der erste Trunk aus dem Becher der Naturwissenschaften macht atheistisch, aber auf dem Grund des Bechers wartet Gott."
(W. Heisenberg)
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Wie ich weiter oben schon gesagt habe - ist es evtl. ein alter Pentium mit FDIV-Bug?
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
24dan
Beiträge: 274
Registriert: 26. Juni 2006 14:15
Wohnort: Hamburg

Beitrag von 24dan »

Wie erkenne ich eine alten Pentium???
Ich habe das schon auf zwei Maschinen ausprobiert was heisst alt?

Maschine A hat folgenden Pentium:
Intel(R)Pentium(R)M processor 1.50GHz
Treiberanbieter: MS
Treiberdatum: 01.04.2004
Treiberversion: 5.1.2600.0

Maschine B hat folgenden Pentium:
Intel(R)Pentium(R) 4 CPU 1.70GHz
Treiberanbieter: MS
Treiberdatum: 01.04.2004
Treiberversion: 5.1.2600.0

Das Problem grenzt sich wie folgt ein:

int *i_ptr = 30
int i_rest = 2

Code: Alles auswählen


int i_log = log10(*i_ptr)+1; 
int i_erg = (*i_ptr + (pow ( 10, i_log ) * i_rest )); 

Egal was davor der danach folgt hier sollte wenn die oben stehenden Parameter eingehen 230 nicht 229 rauskommen.

Fazit:
Die Log-fkt. scheint auch erstmal richtig.
Die Modulo fkt. ist wohl ebenfalls erstmal richtig.
Ich verstehe nicht wie da 229 rauskommen kann. Sind doch Integer???
"Der erste Trunk aus dem Becher der Naturwissenschaften macht atheistisch, aber auf dem Grund des Bechers wartet Gott."
(W. Heisenberg)
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Ok, also kein alter Pentium...
Du solltest mal einTestproggi schreiben was dir auch alle Zwischenergebnisse dieser Operationen ausgibt.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
24dan
Beiträge: 274
Registriert: 26. Juni 2006 14:15
Wohnort: Hamburg

Beitrag von 24dan »

Ich habe jetzt die i_log funktion abgelöst durch:

Code: Alles auswählen

			anzahl = 0;
			if ( *i_ptr == 0) anzahl = 10;
			if((*i_ptr >0) && (*i_ptr <=9))anzahl = 10;
			if((*i_ptr >=10) && (*i_ptr <=99))anzahl = 100;
			if((*i_ptr >=100) && (*i_ptr <=999))anzahl = 1000;
			
			i_erg = (*i_ptr + (anzahl*i_rest));	//	zum Teilerg. wird der rest von der letzten divison hinzuaddiert
//			outfile<<"("<<i_erg<<")";

			i_rest = i_erg%i_divisors;			//	rest ermitteln
//			outfile<<i_rest<<" ";
Problem umgangen!!!
"Der erste Trunk aus dem Becher der Naturwissenschaften macht atheistisch, aber auf dem Grund des Bechers wartet Gott."
(W. Heisenberg)
Antworten