|
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Tomtitom
Anmeldungsdatum: 20.09.2004 Beiträge: 308
|
Verfasst am: 28.08.2005, 10:13 Titel: Primprogramme - war:'ideen' im QBasic-Forum |
|
|
Hallo,
also ich wollte ja mal die verschiedenen Algorithmen vergleichen, welcher am schnellsten ist. Es hat etwas gedauert, da ich irgendwie vor einem Rätsel stehe, was ich nicht lösen konnte.
Aber schaut selbst:
Ich habe 3 Algorithmen verglichen:
Prim1 - der ganz normale, wo einfach die Zahl durch alle Teiler geteilt wird.
Prim2 - die Idee von surfer, dass man halt nur die vorigen Primzahlen als Teiler nimmt
Prim3 - eigentlich mein Favorit, aber da ist auch mein Problem. Hier habe ich das Programm von qbasic.de genommen und es etwas verändert, so dass man keine externen Dateien mehr brauch.
Bei FB habe ich die Programme bis 1000000 laufen lassen, dabei kam folgendes raus:
Prim1: 9,9 sec
Prim2: 7,4 sec
Prim3: 20,6 sec
In QB habe ich die Programme bis 175000 laufen lassen, da bei Prim2 und Prim3 nicht mehr wegen dem Speicher drin war, außerdem hatte ich sie natürlich noch so geändert, dass sie in QB laufen:
Prim1: 5,86 sec
Prim2: 2,75 sec
Prim3: 0,77 sec
So, jetzt meine Frage, warum läuft mein Prim3 bitteschön in FB total lahm, während es auf QB mindestens 5 mal so schnell läuft ??? Kann das echt nicht nachvollziehen. Und den Fall, dass Prim3 irgendwie nicht richtig in QB läuft und einfach viel überspringt konnte ich meines Erachtens auch ausschließen.
MfG, Tomtitom |
|
Nach oben |
|
|
Mecki Igel
Anmeldungsdatum: 10.09.2004 Beiträge: 985 Wohnort: Niederbayern
|
Verfasst am: 28.08.2005, 12:35 Titel: |
|
|
Ich hab mir jetzt deinen Code noch nicht angeschaut. Aber QB und FB erzeugen grundsätzlich einmal ganz verschiedene EXEn, wie du sicher weißt. QB schreibt einen Pseudocode in die EXE, der dann noch etwas nachinterpretiert wird.
Außerdem hat der FreeBASIC-Compiler ja noch einige Optimierungsroutinen auf Lager, die er beim Compilieren anwendet.. _________________ » Yodl.de: So sucht man gestern.
» Geld verdienen im Netz + ICQ.
» Firefox!
» 100€ zu gewinnen
» FreeBASIC.de |
|
Nach oben |
|
|
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1875 Wohnort: D59192
|
Verfasst am: 28.08.2005, 13:03 Titel: |
|
|
setz mal, wie hier, vor diese Zeile ein Hochkomma
Code: | ' LOCATE 1,1: PRINT "letzte Primzahl: "; prim(anz-1) |
dann wird QB ganz schön lahm aussehen!
die Print und Locate Anweisungen in FB sind extreme Zeitfresser!
EDIT/ @Mecki, v1ctor sagt ; der Compilercode wird noch nicht optimiert, erst in späteren Versionen? _________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater. |
|
Nach oben |
|
|
d.j.peters Gast
|
Verfasst am: 28.08.2005, 17:48 Titel: |
|
|
Hallo tomiton,
vergleich doch auch mal mit meinem posting http://fb.exp-soft.de/fbnp/?view=34 müste ziemlich flott sein weil nur ein mod benutzt wird.
Grüsse Joshy |
|
Nach oben |
|
|
Tomtitom
Anmeldungsdatum: 20.09.2004 Beiträge: 308
|
Verfasst am: 28.08.2005, 19:40 Titel: |
|
|
@ volta: du hast recht, ich dachte LOCATE 1,1:PRINT irgendwas ist in FB und QB gleichschnell, aber es ist in FB ja viel langsamer vor allem in der Konsole mit Grafikmodies ist es seltsamer weise schneller, aber immer noch langsamer als in QB.
Und selbst wenn ich die Codezeile weglasse, ist mein Prim3 in FB "nur" genauso schnell wie in QB.
Da frage ich mich immernoch, warum das nicht schneller geht, bei den anderen Programmen ist enormer Geschwindigkeitszuwachs.
Und wieso ist das LOCATE:PRINT in FB überhaupt so lahm?
@Joshy: also das mod hat schonmal überhaupt keinen Geschwindigkeitsvorteil gegenüber meinen a\b=a/b und in Prim3 tritt ja sowas auch schon gar nicht auf, aber danke für den Hinweis, obwohl ich das Programm schon gesehen hatte
Edit: hab mitgekriegt, dass es in dem doch was ausmacht, aber das ist Maniküre
Zuletzt bearbeitet von Tomtitom am 28.08.2005, 23:52, insgesamt einmal bearbeitet |
|
Nach oben |
|
|
surfer87
Anmeldungsdatum: 16.09.2004 Beiträge: 103
|
|
Nach oben |
|
|
Tomtitom
Anmeldungsdatum: 20.09.2004 Beiträge: 308
|
Verfasst am: 29.08.2005, 19:25 Titel: |
|
|
Wieso gibst du nur die exe? Hast du Angst, dass wir deinen tollen Algorithmus klauen
Jedenfalls kann ich so auch nicht sehen, was bei dir alles in die zeitrechnung mit reinkommt, also gehe ich von dem Minimum aus und da ist dein Programm auch nicht schneller, als wenn ich Prim 2 mit dem mod nehme. Und Prim3 ist auch nicht sehr viel langsamer, in QB wäre es sicher genausoschnell, leider reicht da nicht der Speicher.
Vielleicht finde ich ja mal noch raus, was denn in FB noch langsamer läuft. |
|
Nach oben |
|
|
d.j.peters Gast
|
Verfasst am: 29.08.2005, 21:05 Titel: |
|
|
Tomtitom hat Folgendes geschrieben: | @Joshy: also das mod hat schonmal überhaupt keinen Geschwindigkeitsvorteil gegenüber meinen a\b=a/b und in Prim3 tritt ja sowas auch schon gar nicht auf, aber danke für den Hinweis, obwohl ich das Programm schon gesehen hatte
Edit: hab mitgekriegt, dass es in dem doch was ausmacht, aber das ist Maniküre |
Ach so, schneller gehts nicht und das ist Maniküre?!?
Was bekommst du denn für 1 Millionen Durchläufe für Zeiten im Gegesatzt zu den anderen Algos.?
Grüsse Joshy
(Auf AMD unter Linux sind die Unterschiede schon recht Groß.) |
|
Nach oben |
|
|
surfer87
Anmeldungsdatum: 16.09.2004 Beiträge: 103
|
|
Nach oben |
|
|
Tomtitom
Anmeldungsdatum: 20.09.2004 Beiträge: 308
|
Verfasst am: 29.08.2005, 23:25 Titel: |
|
|
d.j.peters hat Folgendes geschrieben: |
Ach so, schneller gehts nicht und das ist Maniküre?!?
Was bekommst du denn für 1 Millionen Durchläufe für Zeiten im Gegesatzt zu den anderen Algos.?
|
Ja tut mir leid, hab das etwas komisch aufgeschrieben, ich hatte erst mit einer simplen FOR-Schleife beide ausdrücke ausprobiert, da hat man überhaupt keinen Unterschied gemerkt, wahrscheinlich lag es daran, dass es da keine Variablen waren.
Jedenfalls habe ich dann später mitgekriegt und dass es nur Maniküre ist, da muss ich mich auch geirrt haben, denn es bringt wirklich schon so 30-40% Zeitgewinn.
@ surfer: im Prinzip ist es ja das gleiche Prog, wie meins mit eben dem mod, teilweise nur sogar etwas umständlicher geschrieben - berught das darauf, dass du ausprobiert hast was am schnellsten ist oder warum nutzt du GOTO und DO:LOOP anstatt FOR:NEXT? |
|
Nach oben |
|
|
tilli
Anmeldungsdatum: 10.09.2005 Beiträge: 73
|
Verfasst am: 12.09.2005, 15:37 Titel: |
|
|
Moin,
@ surfer87 , bezüglich des codes
Ich glaube da ist was durcheinandergeraten:
Das mit dem SQR bezieht sich auf den Wert der Priemzahl, nicht auf dessen Index! Es kann schon sein dass das zufällig läuft, aber mir fällt zumindest im Moment nicht ein wie das streng mathematish zu beweisen sein soll...
Man kann das machen indem man statt der For-Schleife eine loop schleife mit eigenem Zähler und Vergleich mit dem indiziertem Wetes der Tabelle mit der Wurzel bearbeitet.
Die Geschwindigkeit kann sicherlich durch das vorabberechnen des Wurzelwertes erreicht werden. Möglicherweise tut das der Q-Basiccompiler automatisch. es kann auch sein, dass Q-Baisic kürzere Integer benutzt... das muss man halt sehen. Erzeugen denn beide die identische Datei?
Es wäre zum Vergleich sicherlich auch sinnvoll den Plattenoutput nicht in die Zeitberechnung einfließen zu lassen - wir wollen ja nicht wissen, welcher Systemzeitfresser die Platten mehr beansprucht ...
Wenn man es ganz genau nimmt, kann man auch auf die for-next mit 2 anfangen lasse - durch 2 Teilbare Werte sind ja eh ausgeschlossen... das sollte aber nicht allzuviel bringen (thema "Maniküre" )
man kann auch die Sprünge in dem Muster 2/4/2/4/2/4/2/4... laufen lassen, da jeder sechste Wert bekanntermaßen durch 3 teilbar ist - dazu ist es natürlich erforderlich mit 5 anzufangen und 3 schonmal in die Liste aufzunehmen. Das muss aber auch nicht allzuviel bringen, da die Zahl 3 in der Liste recht weit am Anfang liegt.
Kurz:es gibt immer was zu tun
CU2
Tilli |
|
Nach oben |
|
|
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|