• Liebe User, bitte beachtet folgendes Thema: Was im Forum passiert, bleibt im Forum! Danke!
  • Hallo Gemeinde! Das Problem leidet zurzeit unter technischen Problemen. Wir sind da dran, aber das Zeitkontingent ist begrenzt. In der Zwischenzeit dürfte den meisten aufgefallen sein, dass das Erstellen von Posts funktioniert, auch wenn das Forum erstmal eine Fehlermeldung wirft. Um unseren Löschaufwand zu minimieren, bitten wir euch darum, nicht mehrmals auf 'Post Reply' zu klicken, da das zur Mehrfachposts führt. Grußworte.

C-Programm liefert andere Werte unter Windows

Mitglied seit
13.04.2002
Beiträge
747
Reaktionen
0
Ort
Braunschweig
Hi,

wenn ich gewisse C-Programme unter Windows compiliere und mit gewissen Instanzen starte, bekomme ich andere Werte raus, als wenn ich das gleiche Programm unter Linux compiliere und dort starte. Woran kann dies liegen? Evtl. bei Funktionen aus Bibliotheken benutzt wurden?

Aufgefallen ist mir dies, sofern ich "qsort" aus der stdlib.h benutze.

Als Compiler dient unter Windows das Visual Studio 2008 Pro Edition und unter Linux wirds per GCC (Version weiß ich leider nicht) compiliert.

Woran könnte es sonst liegen?
 

ROOT

Technik/Software Forum, Casino Port Zion
Mitglied seit
17.11.2002
Beiträge
7.052
Reaktionen
38
Ort
MS
So vage wie du das formuliert hast kann man da ja nicht unbedingt präzise antworten.
Rechnet dein Prog falsch, sortiert es falsch, oder was für gewisse Werte ändern sich wo? :eek3:
 
Mitglied seit
13.04.2002
Beiträge
747
Reaktionen
0
Ort
Braunschweig
Ob es falsch rechnet, weiß ich gerade nicht.

Aber es gibt Musterlösungen zu Hausaufgaben im Netz und sofern ich die Programme unter Linux laufen lasse, stimmen die Werte auch überein. Starte ich die Programme jedoch unter Windows, verändern sich die Werte (z.b. werden dann andere Kanten aus einem Graphen entfernt und somit entstehen andere Lösungen).

Es handelt sich bei den Algorithmen um Approximationsalgorithmen, daher kann die entsprechende (unter Windows) erzeugte Lösung immernoch zulässig sein, jedoch verwundert es mich, dass z.B. andere Kanten gelöscht werden/genommen werden.

Ich bekomme also 2 verschiedene Lösungen mit dem gleichen Programm zustande, je nach dem auf welcher Plattform ich die laufen lasse.
 

ROOT

Technik/Software Forum, Casino Port Zion
Mitglied seit
17.11.2002
Beiträge
7.052
Reaktionen
38
Ort
MS
Unter Umständen unterscheiden sich natürlich die Header. Kompilier es dochmal unter Windows mit MinGW und schau was dann passiert - bekommst du dasselbe Ergebnis wie unter Linux, würd ich ganz klar darauf tippen, dass es an den Headern liegt.
 
Mitglied seit
13.04.2002
Beiträge
747
Reaktionen
0
Ort
Braunschweig
Habs nun mal mit dem Dev C++ versucht. Er compiliert das Programm ohne Fehlermeldung, versuche ich es allerdings zu starten meldet sich sofort der Debugger von Visual Studio und sagt mir, dass ein Fehler aufgetreten ist.

Komisch ist auch, dass dies nur bei einer Instanz passiert, die anderen funktionieren ohne Probleme :/
 
Mitglied seit
09.11.2002
Beiträge
880
Reaktionen
0
So genau weiß ich jetzt nicht, was Du programmiert hast, daher mal ein Schuß ins Blaue: Haben die Compiler vielleicht andere Optimierungen als Standard? Sowas wie -fast-math oder so? Versuch mal ohne Optimierungen zu kompilieren.
Ansonsten gewöhn Dich daran - ich habe hier ein (Fortran-)Programm, das je nach Compiler was anderes ausrechnet. g77, gfortran-4.2, ifort, pgf, 77, f95, alles gibt andere Ergebnisse :-(
Und die Ergebnisse sind auch noch unterschiedlich, wenn man andere CPU_Architekturen (Core2Duo bis AMD-Duron) verwendet - schöne neue Computerwelt
 
Mitglied seit
13.04.2002
Beiträge
747
Reaktionen
0
Ort
Braunschweig
Nun, es ist nichtmal mein Programm, sondern eines, welches ich korrigieren/bewerten darf. Daher bin ich etwas verwirrt, aber da es auf Linux laufen soll und dort die richtigen Ergebnisse erscheinen, bin ich zufrieden. Geht ja nur um eine Hausaufgabe :/

-fast-math benutze ich gar nicht, bzw. keine Ahnung, was alles beim Visual Studio gemacht wird. In Linux compiliere ich nur mit gcc -Wall -o und das wars :/

Dennoch danke für die Ideen.
 

RRA^StArFiRe

Guest
wenn du funktionen aus bibliotheken benutzt, und der rest des codes gleich ist...
dann würd ich mir mal diese funktionen genauer anschauen ;)

ist auf jeden fall klar, dass sich die verschiedenen libraries der compiler unterscheiden.
ist ja schließlich kein java.
das ist einer der nachteile von c++. keine plattformunabhängigkeit. dein code kann auf jeder anderen plattform funktionieren, muss aber nicht.

wobei stdlib eigentlich standardisiert sein sollte.

und die optimierungen wie metatron sagte spielen da auch ne große rolle.
schreib einfach nen ticket an microsoft, die erklären dir genau, warum visual studio da was anderes produziert, und welche häkchen du da setzen musst ;)
 

The_Company

Guest
qsort macht zB keine Garantie darueber wie gleiche Elemente sortiert werden. Also kann Windows Werte anders sortieren als Linux, weil sie ne unterschiedliche qsort Implementation benutzen.

Und derjeneige, der behauptet, Java haette solche Probleme nicht, der moege sich bitte ueber java.io.File aufklaeren lassen.
 

RRA^StArFiRe

Guest
ja bei so spezifischen sachen lassen sich unterschiede doch gar nicht vermeiden, company.
pfadnamen würde man doch auch niemals statisch hinzufügen, sondern eher generieren oder vom user eintragen lassen.

aber im großen und ganzen sind doch die libs an sich auf jeder plattform, sei es linux, windows oder mac etc., gleich?
 

The_Company

Guest
Der Punkt ist einfach, dass Du Kompatibilitaetsprobleme hast, egal welche Programmiersprache Du nimmst, weil die Betriebssysteme einfach unterschiedlich sind. Da kannst Du noch soviele Abstraktionen haben, es gibt kein C: unter Linux.

Natuerlich ist es so, dass einige Programiersprachen mehr Unterschiede zulassen und andere weniger, was manchen Personen entgegenkommen mag, aber das Argument "das Problem gibts nicht" ist schlicht falsch.
Meistens gehen solche Sprachen auch den LCD-Weg und bieten Features, die auf verschiedenen Systemen unterschiedlich sind, gar nicht erst an. Was auch nicht gerade toll ist.
 
Mitglied seit
18.07.2001
Beiträge
2.152
Reaktionen
2
Ort
Nürnberg
Der Punkt ist einfach, dass die Diskussion sinnlos ist. Wenn ein Stueck Code auf zwei compilern unterschiedliche resultate ergibt (und kein zufallszahlengenerator ist^^) ist er scheisse geschrieben (hallo kreative-casts) oder mit so ner gcc kamikaze-optimier-option kompiliert. Wenn zwei libraries ein unterschiedliches ergebnis bekommen das aber jeweils der definition der funktion entspricht ist das ok. wie etwa mit der stabilen oder instabilen(tendenziellen schnelleren) implementation von quicksort.

interessant waere das eher wenn man nen stueck code haette den man auseinanderrupfen koennte :)
 
Oben