Fehler in Sqr(n) Funktion ?

Für Fehler in Lazarus, um diese von anderen verifizieren zu lassen.
Antworten
wickedsmith
Beiträge: 1
Registriert: Fr 2. Mai 2014, 15:04

Fehler in Sqr(n) Funktion ?

Beitrag von wickedsmith »

Hallo zusammen,

bin neu hier. Ich habe Windows7 und Lazarus 1.0.4
In einer Anwendung zur numerischen Berechnung werden bestimmte Zahlen auf prim geprüft.

In einer Schleife werden zunächst 10000 Zahlen durchlaufen. Erhöht man die Schleife auf 1 Mio (also 1000000)
gibt es in der isprime Funktion eine Exception in der Sqr(n) Funktion. Die Anwendung stürzt ab. Daraufhin werden neue Berechnungen im absoluten Schneckentempo abgearbeitet.
Ich habe das Gefühl, dass mein System irgendwo einen Hau weg hat. Die Grafikkarte hatte danach nur noch 3 Auflösungsmöglichkeiten ????
Also test am besten auf einem alten System :lol:

Auf einer grafischen Oberfläche oder Konsolenanwendung
habe ich folgende Funktionalität (z.B. hinter einem Button_Click)

Code: Alles auswählen

 for i := 2 to 100000 do
  begin
     q := i * i;
     n := q + (i - 1);
     p := False;
     p := isprime(n);
 
  end


Die Funktion isprime sieht wie folgt aus:

Code: Alles auswählen

 function isprime(zahl: LongInt): boolean;
  var i: Longint;
    var z: real;
      var erg: Longint;
 
begin
   i:=0;
     if (zahl mod 2 = 0) then //alle geraden Zahlen ausser 2 ausschliessen - verdoppelt die Geschwindigkeit
    begin
         if (zahl = 2) then
         begin
         exit(True);
         end
         else exit(False); //gerade zahlen ausschliessen
    end;
    i := 3;
 [color=#FF0000]   z := Sqr(zahl);[/color]
 
    repeat
    begin
       erg :=  zahl mod i;
        if( erg = 0) then
        begin
 
        exit(False);
        end;
            i := i + 2;    //nur jede 2 Zahl
           // ShowMessage(IntToStr(i));
    end;
 
 

until i > z;
isprime := True; //ansonsten war kein Teiler da --> prim = true

end;
Zuletzt geändert von Lori am Fr 2. Mai 2014, 15:51, insgesamt 1-mal geändert.
Grund: Bitte den Highlighter nutzen.

Benutzeravatar
theo
Beiträge: 10468
Registriert: Mo 11. Sep 2006, 19:01

Re: Fehler in Sqr(n) Funktion ?

Beitrag von theo »

Hab's jetzt nicht genau angeschaut, aber bereits mit

q := i * i;
also
100000*100000 = 10 000 000 000 verletzt du den Wertebereich des Parmeters LongInt 2.147.483.647 (oder Cardinal 4.294.967.295)

Ein bisschen weiter kommst du mit Int64.


Antworten