Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Int64 in For-Schleife (https://www.delphipraxis.net/11789-int64-schleife.html)

CalganX 13. Nov 2003 17:04


Int64 in For-Schleife
 
Hi,
seit langem eröffne ich auch mal wieder einen Thread. ;)

Ich habe folgendes Problem: ich will mal aus Spaß an der Freud' einfach mal alle Primzahlen zwischen 1 und 2^63-1 finden. Also alle im Bereich von Int64. Das Problem ist nun, dass meine Laufvariable in meiner Schleife ein Int64 Wert. Allerdings ist Int64 kein ordinaler Typ. :|

Welche Möglichkeit gibt es da?
Was mir jetzt direkt in den Kopf käme wäre ein Integer-Wert, der gecastet wird auf den ein Übertrag aufgerechnet werde für alles, was interger bzw. longint nicht mehr kann. Allerdings scheint mir diese Methode etwas sehr umständlich. Deswege frage ich nach einer alternativen Möglichkeit.

Chris

Alibi 13. Nov 2003 17:14

Re: Int64 in For-Schleife
 
Wie wärs mit ner While-Schleife?

Hmpf, hätt das nicht ausprobieren sollen, der ist hier schon ne ganze Weile dabei...
Delphi-Quellcode:
var
  i: int64;
begin
  i := 0;
  while i < high(i) do
    inc(i);
  showmessage(inttostr(i));

CalganX 13. Nov 2003 17:36

Re: Int64 in For-Schleife
 
Hi,
danke für den Tipp. Funktioniert soweit ganz gut. :) Danke.

Chris

CalganX 13. Nov 2003 17:50

Re: Int64 in For-Schleife
 
Hi,
allerdings scheint da noch ein paar Fehler drin zu sein. Die folgende Funktion sagt, dass 0 und 1 eine Primzahl ist, allerdings stimmt das ja nicht wirklich und bei 3 hängt er sich auf bzw. braucht etwas sehr lange. :( Das passiert beim Original nicht. :(

Delphi-Quellcode:
function isPrime (n: int64): boolean;
var
  i: int64;
begin
  Result := true;
  i := 2;
  while ((i <= n-1) and (bOK)) do begin
    if (n mod i) = 0 then
    begin
      Result := False;
      exit;
    end;
    Application.ProcessMessages;
  end;
end;
Chris

choose 13. Nov 2003 18:11

Re: Int64 in For-Schleife
 
Hallo Chakotay1308,

ist Dir bewusst, dass (angenommen Deine Schleife funktioniert, Du hättest ein Inc eingesetzt, etc) Deine BruteForce-Methode etwas mehr Zeit in Anspruch nehmen könnte? Angenommen, Dein Rechner schafft bei konstanter Zeit 2 Milliarden (2^31) Iterationen pro Sekunde (was utopisch ist!) dann würdest Du weitere 4 Milliarden (2^32) Sekunden warten müssen, bis die Abbruchbedingung
Delphi-Quellcode:
i >= high(i)
erfüllt ist...

CalganX 13. Nov 2003 18:14

Re: Int64 in For-Schleife
 
Hi,
danke für deinen (versteckten) Hinweis. :duck:
Mir ist klar, dass das, was ich da mache ziemlich selbstmörderisch ist (für die, die nicht so gut im Kopfrechnen sind: 4 Milliarden Sekunden sind ungefähr 1111111 Stunden ;)). Allerdings ist das jetzt erstmal egal. Bei Gelegenheit werde ich mir was besseres Einfallen lassen. Es geht jetzt erstmal darum zu gucken, wie gut der Prozessor das schafft. ;)

Chris


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:29 Uhr.

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