Anonymní profil SamuelKo – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Anonymní profil SamuelKo – Programujte.comAnonymní profil SamuelKo – Programujte.com

 

Příspěvky odeslané z IP adresy 88.212.37.–

SamuelKo
Pascal › SIGnal Floating Point Error
27. 12. 2013   #185687

Ja som idiot :D fakt to môže byť také jednoduché? :D zlé návyky z pythonu... Dik moc :) teraz už ošetrenie funguje a plotí to pekne :)

SamuelKo
Pascal › SIGnal Floating Point Error
26. 12. 2013   #185674

302 je maximum, ktoré možno dostať zo vzťahu (x-(I1.W / 2))*a+b ak a=1, b=2, I1.W=600 a x je od 1 do 600. Menovaťeľ má ohraničenie 0,1, pretože to mám v podmienke ako "if abs(menovateľ)<0,1 then menovateľ=0,1". Double má horné ohraničenie 1,7e308. 

SamuelKo
Pascal › SIGnal Floating Point Error
26. 12. 2013   #185670

Veľmi dobrý nápad. Ale za predpokladu, že použijem napr. koeficienty 1,2,3,3 a obmedzujúcu konštantu 1e-1 a moja polovica šírky plochy (časť osi, na ktorej vykresľujem) je 300, tak maximálna hodnota čitateľa je 302 a minimálna hodnota menovateľa je 0,1. Najvyššia funkčná hodnota nie je viac ako 3020. Aj tak vyskočí SIGFPE. 

PS.: nemal by double jednoducho pretiecť?

SamuelKo
Pascal › SIGnal Floating Point Error
24. 12. 2013   #185598

Ospravedlňujem sa, že som to dostatočne nevysvetlil, ale všetky premenné (a;b;c;d;x;y;w;z) sú globálne doubly, ak prejde podmienka tak w je evidentne nenulové (vzhľadom na to, že sú to doubly, teda majú obmedzenú presnosť tak je tá podmienka prakticky zbytočná, lebo presnú nulu fakt nikdy nijak netrafíme). Celú túto procedúru vyvolávam v cykle pre i:=0 do Image1.Width, pričom i je longint a jeho hodnotu pred výpočtom priradím x. a;b;c;d sú parametre, ktoré načítam z editačného poľa a uložím do príslušných premenných. 

PS.: ja som za python, najradšej by som použil pyplot a hotovo. Bohužiaľ, som bol profesorkou uistený, že to je riešenie za 0b., takže sa môžem ďalej trápiť s asi najmenej user-friendly objektovým prostredím všetkých čias.

SamuelKo
Pascal › SIGnal Floating Point Error
24. 12. 2013   #185589

To nemalo byť ošetrenie :D toto je moje ošetrenie (je to objektové, preto tie rozmery plochy, ale chcem vám to ukázať v pôvodnej podobe): 
 

procedure hodnota(a,b,c,d,x: double);
begin
  if ((x-(Image1.Width div 2))*c+d)=0 then y:=1000000
  else
  w:= ((x-(Image1.Width div 2))*a+b);
  z:= ((x-(Image1.Width div 2))*c+d);
  y:= w/z;
  y:= y+(Image1.Height div 2);

end;

SIGFPE odkazuje na riadok v bolde.

SamuelKo
Pascal › SIGnal Floating Point Error
24. 12. 2013   #185584

Pointa je, že delenie nulou som ošetril a robí to stále. K tomu deleniu nulou... 

FloatToStr(1/0) = + Inf

SamuelKo
Pascal › SIGnal Floating Point Error
23. 12. 2013   #185564

To som ošetril podmienkou if cx+d=0 then y=10^6, čo pre moje účely stačí, ale aj v takom prípade vyhodí SIGFPE. Nejde teda len o bod x=1. Ako klinec do rakvy: ak by aj išlo o bod x=1 teda div zero, nemal by to byť problém, lebo pascal to zvláda a výsledok si pamätá ako "inf" resp. "-inf" a okrem zaokrúhľovania s tým vie robiť prakticky každú operáciu. Ak výpočet y=ax+b/cx+d rozdelím na w=ax+b, z=cx+d, y=w/z tak SIGFPE referuje na riadok y=w/z.

SamuelKo
Pascal › SIGnal Floating Point Error
23. 12. 2013   #185557

Zdravím,

robím domácu úlohu na programovanie. Máme vykresliť graf lineárnej lomenej funkcie bod za bodom do grafickej plochy v Lazaruse. Keď však počítam funkčnú hodnotu ako y:= (a*x+b)/(c*x+d); tak mi vyskočí External: SIGFPE. Všetky hodnoty sú doubly, ktorým priradím hodnoty: počítacej premennej cyklu do x a prečítané inegery z editačných polí. SIGFPE nevyskočí vždy, ale odpozoroval som, že určite vyskočí, keď c=d alebo sa aspoň jedno z a;b;c;d rovná 0. Lenže všetko sú to doubly, takže by sa nikdy nemali rovnať, som z toho zmätený. Tuší niekto ako to vyriešiť? (okrem hintov: nepoužívaj lazarus, rád by som použil niečo iné alebo aspoň vykreslenie vyvolal v pyplote ale nesmiem použiť nič, okrem základného pascalu). Ďakujem

 

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032020 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý