Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Primprogramme - war:'ideen' im QBasic-Forum

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Tomtitom



Anmeldungsdatum: 20.09.2004
Beiträge: 308

BeitragVerfasst am: 28.08.2005, 10:13    Titel: Primprogramme - war:'ideen' im QBasic-Forum Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Mecki
Igel


Anmeldungsdatum: 10.09.2004
Beiträge: 985
Wohnort: Niederbayern

BeitragVerfasst am: 28.08.2005, 12:35    Titel: Antworten mit Zitat

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. verwundert
» Geld verdienen im Netz + ICQ.
» Firefox!
» 100€ zu gewinnen
» FreeBASIC.de
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen AIM-Name Yahoo Messenger MSN Messenger
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1875
Wohnort: D59192

BeitragVerfasst am: 28.08.2005, 13:03    Titel: Antworten mit Zitat

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! grinsen

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
d.j.peters
Gast





BeitragVerfasst am: 28.08.2005, 17:48    Titel: Antworten mit Zitat

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. zwinkern

Grüsse Joshy
Nach oben
Tomtitom



Anmeldungsdatum: 20.09.2004
Beiträge: 308

BeitragVerfasst am: 28.08.2005, 19:40    Titel: Antworten mit Zitat

@ 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 verwundert 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 mit den Augen rollen
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
Benutzer-Profile anzeigen Private Nachricht senden
surfer87



Anmeldungsdatum: 16.09.2004
Beiträge: 103

BeitragVerfasst am: 28.08.2005, 21:07    Titel: Antworten mit Zitat

http://mitglied.lycos.de/bastian87/prim.zip

So. das ist mein Primzahl Prog. Erstmal ohne Quellcode abe rbitte mal testen.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Tomtitom



Anmeldungsdatum: 20.09.2004
Beiträge: 308

BeitragVerfasst am: 29.08.2005, 19:25    Titel: Antworten mit Zitat

surfer87 hat Folgendes geschrieben:
http://mitglied.lycos.de/bastian87/prim.zip

So. das ist mein Primzahl Prog. Erstmal ohne Quellcode abe rbitte mal testen.


Wieso gibst du nur die exe? Hast du Angst, dass wir deinen tollen Algorithmus klauen mit den Augen rollen
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
Benutzer-Profile anzeigen Private Nachricht senden
d.j.peters
Gast





BeitragVerfasst am: 29.08.2005, 21:05    Titel: Antworten mit Zitat

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 mit den Augen rollen
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

BeitragVerfasst am: 29.08.2005, 21:45    Titel: Antworten mit Zitat

http://mitglied.lycos.de/bastian87/prim.bas

So hier der Source. happy
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Tomtitom



Anmeldungsdatum: 20.09.2004
Beiträge: 308

BeitragVerfasst am: 29.08.2005, 23:25    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
tilli



Anmeldungsdatum: 10.09.2005
Beiträge: 73

BeitragVerfasst am: 12.09.2005, 15:37    Titel: Antworten mit Zitat

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" lächeln )
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 lächeln - 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 zwinkern

CU2
Tilli
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
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.

 Impressum :: Datenschutz