Ich glaube, ich habe einen Fehler gefunden
Delphi-Quellcode:
unit pi_crash;
interface
implementation
// siehe http://www.hjcaspar.de/hpxp/piprog.htm
function pi_newton(rounds: cardinal): double;
var
x : double;
cur_round: cardinal;
begin
x := 3;
{ START VARIANTE 1 }
for cur_round := 1
to rounds
do
begin
// ENDE VARIANTE 1 }
{ START VARIANTE 2
while (cur_round < rounds) do
begin
cur_round := cur_round + 1;
// ENDE VARIANTE 2 }
x:=x-sin(x)/cos(x);
end;
result := x;
end;
begin
write('
Pi is: '+ FloatToStr(pi_newton(5000)));
end.
In der ersten Variante gibt es das Ergebnis 32 (nicht mal annähernd Pi), Variante zwei führt zu einem netten Laufzeitfehler:
Code:
Compiling program...
Successfully compiled program
Runtime Error: (PI_CRASH:20) Address Error (Address ID = 31)