Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi modulo-Beschleunigung (https://www.delphipraxis.net/89798-modulo-beschleunigung.html)

Ullli 5. Apr 2007 21:06


modulo-Beschleunigung
 
Hallo,

ich habe ein Programm geschrieben, das etwas langsam läuft, weil darin viele mod-Operationen vorkommen. Es wird immer wieder n mod x, x € einer Gruppe von acht vorkommenden Zahlen gerechnet. Kann man das beschleunigen??

Dax 5. Apr 2007 21:08

Re: modulo-Beschleunigung
 
Sind diese Zahlen in der Form 2^x?

Ullli 5. Apr 2007 21:27

Re: modulo-Beschleunigung
 
nein, sind sie leider nicht. Aber ich kenne sie schon vor Durchlauf des Programms, könnte sie also in einen array schreiben und irgendetwas damit machen.

Zacherl 5. Apr 2007 21:33

Re: modulo-Beschleunigung
 
Zeig mal ein bisschen Code ..

Ullli 6. Apr 2007 10:27

Re: modulo-Beschleunigung
 
Hi, ich muß immer wieder Zahlen n auf ihre modulo-Reste testen, diese Schleife wird sehr häufig durchlaufen:

Delphi-Quellcode:
n := ...
  r := n mod 17;
  if r = 1 then
  begin
    ...
  end
  else
    if r = 4 then
    begin
      ...
    end;
Von allgemeinerem Interesse ist das Problem vielleicht bei Primzahl-Sieben.
Mein Eratosthenes-Sieb braucht auf meiner alten Gurke für Primzahlen < 10^9 ca 40s.
Da ich Primeln bis 10^12 brauche, bin ich auf Atkin (siehe wiki) umgestiegen. Dort fallen viele Rechnungen modulo 12 an. z.B.:

Delphi-Quellcode:
n := ...
  r := n mod 12;
  if (r = 1) or (r = 5) then
    Sieve.Bits[n] := not Sieve.Bits[n];
Durch die ganzen modulos läuft Atkin bei mir noch langsamer als Eratosthenes, was eigentlich nicht sein sollte.
Da gibts doch bestimmt irgendwelche Tricks?!


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:22 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz