Delphi Can

Orjinalini görmek için tıklayınız: Android hesaplama yaparken çökmesi
Şu anda (Arşiv) modunu görüntülemektesiniz. Orjinal Sürümü Görüntüle internal link
Merhaba, bir adet array'im var ve bu array içinde kordinatlar mevcut.
Her kordinatın bir önceki kordinat arasındaki mesafeyi alarak toplam mesafeyi hesaplıyorum.

Array içindeki veri sayısı 5000'den fazla olursa uygulama kapanıyor. (Tam değeri bilmiyorum 5000 veya 6000 den fazla yapabiliyorum 5000 yapınca sorun yok fakat 6000 yapınca uygulama çöküyor)

Büyük ihtimalle hatalı kullanım yapıyorum, hata ne olabilir?

    for I := 0 to length(logGeçişNoktaları) - 1 do
   begin
     nextway := nextway + 1;
     if nextway = 2 then
     begin
       nextway := 1;
       tempdistance := trunc(Get2KoordinatToMetre(logGeçişNoktaları[i - 1],
         logGeçişNoktaları[i]));
       if tempdistance > 20 then
       begin
          distance := distance + tempdistance;
       end;
     end;
   end;
    lbl_distance.Text := trunc((trunc(distance) * (0.00062137119223733)))
    .ToString + ' Mil';
 end;

Function Get2KoordinatToMetre(Bas, bit: TMapCoordinate): EXTENDED;
begin
 Result := RadToDeg(ArcCos(sin(DegToRad(Bas.Latitude)) *
   sin(DegToRad(bit.Latitude)) + Cos(DegToRad(Bas.Latitude)) *
   Cos(DegToRad(bit.Latitude)) * Cos(DegToRad(Bas.Longitude - bit.Longitude))))
   * 60 * 1.1515 * 1.609344 * 1000;

end;

Ayrıca aşağıdaki satırı çıkarınca crash yemiyorum

 
 tempdistance := trunc(Get2KoordinatToMetre(logGeçişNoktaları[i - 1],

        logGeçişNoktaları[i]));
Bir Exception oluşuyor olabilir mi ? İlgili metodun içindeki kodu try/except ile sarmalayıp bir deneyin, bakalım sonuç ne olacak.
Koordinat değerlerinden biri (Lat, long) sıfır veya Nan (değer alamamış koordinat) değere sahip olabilir. 
İlgili kısmı debug ederek listede yer alan tüm koordintları gözden geçirin. 
Nan değer varsa bunu aşağıdaki gibi bir kontrolle aşabilirsiniz. 
  if (Bas.Latitude.IsNan) or (Bas.Longitude.IsNan) or (bit.Latitude.IsNan) or (bit.Longitude.IsNan) then
   Result := 0
 else
   Result := RadToDeg(...);
Tabi bu durumda Nan olan koordinatlar, mesafe hesabının yanlış olmasına sebep olacaktır.
(20-04-2022, Saat: 11:41)RAD Coder Adlı Kullanıcıdan Alıntı: [ -> ]Koordinat değerlerinden biri (Lat, long) sıfır veya Nan (değer alamamış koordinat) değere sahip olabilir. 
İlgili kısmı debug ederek listede yer alan tüm koordintları gözden geçirin. 
Nan değer varsa bunu aşağıdaki gibi bir kontrolle aşabilirsiniz. 
  if (Bas.Latitude.IsNan) or (Bas.Longitude.IsNan) or (bit.Latitude.IsNan) or (bit.Longitude.IsNan) then
   Result := 0
 else
   Result := RadToDeg(...);
Tabi bu durumda Nan olan koordinatlar, mesafe hesabının yanlış olmasına sebep olacaktır.

Cevaplarınız için çok teşekkür ederim.
normalde lat ve long değerleri 0 veya nan olamaz (manuel kontrol ettiğimde de 0 veya nan yok), çekerken kontrolünü sağlıyorum. Fakat try except bloğun'a aldığımda  invalid floating mesajını aldım.

Sorun şuradaymış;
for içinde  logGeçişNoktaları  array'ını -1 yapıyorum bu nedenle for 0 olduğunda logGeçişNoktaları[-1]  değeri oluyor ve hata çıkıyor.
for'u 1 den başlatınca sorun çözülmüş oldu.