2024(e)ko martxoaren 4(a), astelehena

7. astea | Taylor azpiprogramaz (edozein angelurako)








7. astea | Taylor (angelu txikiekin) blog-artikuluan ikusi dugu Taylor metodoa nola aplikatzen zaion 0 eta Π/2 artean dagoen sarrerako x angelu bati. Baina eta edozein angelu sartuko bagenu? Ikusitako programak ondo ibiliko lirateke? Kalkulu ahulena zein izan daiteke?

7. astea | Taylor (angelu txikiekin) artikuluko programa aldatzen baduzu sarrerako datua 0.0 gradu eta 360.0 gradu artekoa izan dadin; ikusiko duzu nola 160 graduko angelu batekin ondo dabilela, baina 160.9 graduko angeluarekin programa ez dabilela. Arazoa faktorialaren kalkulu honetan dago:
function fnliFaktoriala(iZbk:integer): longint;
var
   j: integer;
   liMetatua: longint;
begin
   liMetatua := 1;
   for j:=1 to iZbk do
   begin
      liMetatua := liMetatua*j;
      //writeln('j=', j, ' ---faktoriala-> ', liMetatua);   (* agindu hau indarrean jarri programa ulertzeko *)
   end;
   fnliFaktoriala := liMetatua;
end;
Faktorialaren kalkulua ondo dago. Baina iZbk datua handia bada, gerta daiteke liMetatua handiegia izatea longint datu-motarako eta orduan funtzioaren emaitza desegokia izango litzateke.

Izan ere, goiko funtzio horretan, faktoriala lortzean emaitza longint datu-motako aldagai batean gordetzen da, eta angelu handiekin faktorialaren balioak longint datu-motak duen muga gainditzen du. Horregatik, 0.0 gradu eta 360.0 gradu arteko angeluekin lan egin ahal izateko, faktorialaren funtzioa aldatuko dugu bere emaitza real datu-motakoa izan dadin.
function fnrFaktoriala(iZbk:integer): real;
var
   j: integer;
   rMetatua: real;
begin
   rMetatua := 1.0;
   for j:=1 to iZbk do
   begin
      rMetatua := rMetatua*j;
      //writeln('j=', j, ' ---faktoriala--> ', rMetatua:0:10);   (* agindu hau indarrean jarri programa ulertzeko *)
   end;
   fnrFaktoriala := rMetatua;
end;

Sarrerako angelua oso handia bada, esate baterako 98765.9 graduko angelua sartuko bagenu, hurrengo moldaketa aplikatuko genioke:
Datua den 98765.9 gradu zati 360 egin ondoren, 98765.9/360 eta zatiketaren hondarrarekin geratuko ginateke bere kosinua kalkulatzeko. Zatiketa horren zatidurak adierazten du 98765.9 graduko angeluak zirkuluari zenbat bira ematen dizkion eta kosinuaren kalkulurako garrantzirik ez du, baina zatiketaren hondarrak garrantzia du. Ez-osoa den zenbaki baten atalak nola lortzen diren gogoratu int(), frac(), round() eta trunc() funtzioak birpasatuz.




 Emaitza laster... 

 

iruzkinik ez:

Argitaratu iruzkina

Iruzkinen bat idazteko Google-ko kontu bat behar duzu. Iruzkin guztien moderazio-ardura blogeko administratzaileari dagokio.