Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno Problém s NAN v nových Delphi

Dobrý deň, mám aplikáciu, ktorá počíta na základe gps súradníc vzdialenosti medzi gps bodmi, prípadne cieľový bod od počiatočného bodu v zadanom smere a vzdialenosti. Výpočet nového bodu sa robí takouto funkciou:

Procedure Rhumb1(LAT1,LON1, Azimuth1, Dist:EXTENDED; VAR LAT2, LON2:EXTENDED);
 var
   sig, DLat, PDLat, q, DLon:extended;
 begin
sig:=Dist/(1000*ERad);
   DLat:=sig*cos(azimuth1);
   Lat2:=Lat1+DLat;
PDLat:=ln(tan(Pi/4+Lat2/2)/tan(Pi/4+Lat1/2));
   if PDLat>1e-12 then Q:=DLat /PDLat else Q:=cos(lat1);
   DLon:=sig*sin(Azimuth1)/Q;
   Lon2:=Lon1+DLon;
 end;

Riadok

PDLat:=ln(tan(Pi/4+Lat2/2)/tan(Pi/4+Lat1/2));

je problematický, pretože v niektorých situáciách nevráti korektný výsledok a vtedy sa ocitáme mimo našej matičky zeme. V starom prostredí Delphi 6 som s tým nemal problém, pretože daný riadok vrátil hodnotu NAN a rovnako tak výsledok lon2 bol NAN takže kdekoľvek v programe po zavolaní tejto procedúry bolo možné urobiť if isnan(lon2) then 'mimo mapu'. V nových Delphi XE8 a 10 však občas program na danom riadku spadne a ak aplikáciu skompilujem na 64 bit, spadne úplne vždy. Viem že existuje možnosť dať to celé do try exception a sledovať kedy došlo k chybe, no zdá sa mi to ako dosť neomalené amatérske riešenie a tak sa chcem opýtať, prečo majú Windows s týmto problém resp ako to nejako riešiť. Skúšal som si na webe nájsť nejaké riešenie a vidím, že s hodnotou NAN je nejaký problém no nenarazil som na žiadne funkčné riešenie. Vďaka

Jsou zobrazeny jen nové odpovědi. Zobrazit všechny
Předmět Autor Datum
Ako si správne napísal, máš aplikáciu. Ale nemáš program.
čitateľ 01.11.2016 09:05
čitateľ
toto ma aky vyzname pri tomto probleme? Preco pises bludy bez logiky? Vrat sa az budes triezvy. Vie… poslední
shiro 01.11.2016 09:47
shiro

toto ma aky vyzname pri tomto probleme? Preco pises bludy bez logiky? Vrat sa az budes triezvy.

Viem že existuje možnosť dať to celé do try exception a sledovať kedy došlo k chybe, no zdá sa mi to ako dosť neomalené amatérske riešenie

ano a preto to checkujes ako posledny amater a spoliehas sa na nejaky systemovy vymysel vracajuci tri pismenka :D Super.

Ako programator mas davno vediet ze s kazdou verziou hocijakeho OS sa toto chovanie moze zmenit a tudiz si si nicim nie isty. Obzvlast ma absencia takehoto rozmyslania a elementarnej logiky prekvapiuje pri niekom, kto programuje zrovna GPS appku, co neni nic lahkeho. Tudiz cakam ze to bude robit vyzrety clovek, ktory rozmysla.

Skratka si na toto urob check niekde v programe, nespoliehaj sa na system ci nejaky obecny vysledok funkcie. Je zaujimave ze sa k 64bit stavias ako k dacomu, co vidis mozno len ako "natiahnutie" registrov na dvojnasobok oproti 32bit. Ziadne take, su tam aj ine zmeny a je ich kopa.

A co delphi dokumentacia, tam si hladat skusal, ze ako sa to spracovava? Prve miesto, kde by som pozeral a nie na fora kadetade.

Zpět do poradny Odpovědět na původní otázku Nahoru