Problema calculării epsilonului mașinii

Valentin Evgenievich, vă rugăm să explicați puțin despre calculul epsilon al mașinii și ajustarea lățimii mesei pe baza ordinului numărului necesar pentru a finaliza lucrările cursului. Am FreeBSD 6.0 și două compilatoare, Free Pascal și GNU Pascal. La cursul de curs, ați propus să luați ca bază următorul exemplu de calcul al epsilonului mașinii -







începe
eps: = 1;
în timp ce (1 + eps / 2)> 1 face
începe
eps: = eps / 2;
se încheie;
writeln ('machine epsilon =', eps round) (7-ln (eps) / ln (10)));
end.

1. Această formă de specificare a numărului de elemente importante semnificative se aplică numai pentru gpc și compaq pc? Am două rezultate diferite

gpc -
mașină epsilon = 2.2204460492503131e-16

fpc -
mașină epsilon = 1.084202172485504E-019

După cum puteți vedea, fpc cu această formă de ieșire determină numărul de caractere ale ieșirii, dar ieșirea nu o exprimă mai precis, pur și simplu umplând pozițiile anterioare cu spații. Sau înțeleg ceva greșit?

În plus, formatul de ieșire pentru fpc este, de asemenea, tăcut de numărul de simboluri de serviciu din ieșire - ordinea este indicată de un număr de trei cifre, în acest caz -019, cu gradul -5 ca -005. Ie forma de ieșire nu este foarte stabilă față de compilator.

Apropo, faptul de interes este dacă măresc în mod arbitrar numărul de cifre semnificative semnificative ale numărului, de exemplu, după cum urmează -
writeln ('machine epsilon =', eps round) (35-ln (eps) / ln (10)));

atunci primesc următorul rezultat final -

mașină epsilon = 2.22044604925031308084726333618164062500000000e-16

și anume în ceea ce privește numărul de caractere un număr mai precis. Restricționând mantisa la 16 zecimale, caracterele semnificative sunt parțial ascunse. Deși mașina nu mai poate diviza acest număr cu 2, deoarece ciclul se încheie, acest număr este ultimul rezultat. Și dacă tot deduceți toate rezultatele intermediare, este foarte interesant să observați la ce simboluri de limită semnificative încep să se piardă.

Cu stimă,
Shafirin Yuri.
c. 18-101

administrator
Inregistrat: acum 8 ani
Mesaje: 0 Membri:

Bună, Yuri! Ai scris:

> Valentin Evgenievich, vă rog să explicați ceva despre
> calcularea epsilonului mașinii și ajustarea lățimii mesei la
> pe baza ordinii numărului,

la curs, am analizat doar calculul lățimii câmpului pentru partea fracționată a epsilonului mașinii!

> necesar pentru finalizarea cursului
> muncă. Am FreeBSD 6.0 și două compilatoare, Free Pascal și GNU
> Pascal. La cursul de curs, ați propus să luați ca bază






> următorul exemplu de calcul al epsilonului mașinii -
>
> program GetEpsilon (ieșire);
>
> var eps. reale;
>
> începe
> eps: = 1;
> în timp ce (1 + eps / 2)> 1 face
> începe
> eps: = eps / 2;
> sfârșit;
> writeln ('machine epsilon =', eps. rotundă (7-ln (eps) / ln (10)));
> sfârșitul.
>
Lățimea totală a câmpului, ne-am estimat (+7), iar la unul din seminarii a continuat cercetarea spre o calculabilitate completă a lățimii.

> Întrebări -
>
> 1. Această formă de specificare a numărului de elemente semnificative excepționale
> Se aplică numai pentru gpc și compaq pc? Am două diferențe
> rezultat
>
> gpc -
> mașină epsilon = 2.2204460492503131e-16
>
> fpc -
> mașină epsilon = 1.084202172485504E-019
>
> După cum puteți vedea, fpc cu această formă de ieșire determină numărul
> caractere de ieșire, dar ieșirea din aceasta nu se transmite mai precis,
> pur și simplu completarea pozițiilor anterioare cu spații. Sau sunt ceva
> Nu este înțeleasă corect?
>

Ei folosesc diferite tipuri de materiale (prejudiciul implicit!). Metoda este întotdeauna aplicabilă, este utilă și utilă, care calculează precizia tipului utilizat efectiv.
> În plus, forma de ieșire a fpc este, de asemenea, tăcută de numărul respectiv
> simboluri de serviciu în ieșire - ordinea este indicată prin trei cifre
> număr, în acest caz ca -019, la -5 ca -005. Ie
> forma de ieșire nu este foarte stabilă față de compilator.
>
> Apropo, faptul de interes - dacă măresc în mod arbitrar
> numărul de cifre semnificative de afișat, de exemplu
> după cum urmează -
> writeln ('machine epsilon =', eps round) (35-ln (eps) / ln (10)));
>
> atunci primesc următorul rezultat final -
>
> mașină epsilon =
> 2.22044604925031308084726333618164062500000000e-16
>
> ie. în ceea ce privește numărul de caractere un număr mai precis.
Acest număr are aceeași precizie, iar majoritatea zecimalelor după punct (de la 17 la 44) sunt incorecte, sunt resturi (chips-uri, chips-uri) funcții de interpretare a reprezentării interne a numărului în derivare. Uneori, pentru acest lucru se utilizează un tip de material mai precis, dar acest lucru nu va adăuga mai mult de 3 caractere: este puțin probabil să existe o aritmetică reală de peste 80 de biți pe computerul de acasă.

> Prin limitarea mantistei la 16 zecimale, semnificative
> simboluri

> parțial ascunse.

Ele nu sunt semnificative! Nu poate exista nici o semnificație mai largă decât mantisa!

> Deși mașina nu mai poate face acest lucru
> numărul împărțit la 2, deoarece ciclul se încheie, acest număr
> este ultimul rezultat. Și dacă încă mai imprimați toate
> rezultate intermediare, este foarte interesant de observat la
> ce limită începe să se piardă caractere semnificative.
>
> Salutari,
> Shafirin Yuri.
> gr. 18-101

administrator
Inregistrat: acum 8 ani
Mesaje: 0 Membri:

> În postul anterior, diferența dintre
> ieșirea programului a compilat fpc și gpc, spațiile între
> = și prima cifră este ștearsă de forum, așa că le voi înlocui
> cu semnul "_"
>
> fpc (patru spații) -
> privat @ FreeBSD01 $ / home / privateer / geteps
> mașină epsilon = ____ 1.084202172485504E-019
>
> gpc (un spațiu) -
> privat @ FreeBSD01 $ /home/privateer/a.out
> mașină epsilon = _2.2204460492503131e-16

fpc în toate valorile implicite, extensiile și restricțiile urmează Borland'u, iar gpc are opțiuni pentru urmărirea diferitelor dialecte și a standardelor Pascal. Concluzia din Pascal nu este standardizată, dar chiar și cu ajutorul instrumentelor standard este posibilă o gestionare destul de subtilă. În special, la olimpiadele de programare cu testarea automată a sarcinilor, este necesară menținerea cu precizie a formatului de ieșire.

Multe mulțumiri pentru răspunsuri. Continuam sa lucrez la mine.

Cu stimă,
Yuri Shafirin.
gr.18-101

Din păcate, numai utilizatorii înregistrați pot scrie în acest forum.







Articole similare

Trimiteți-le prietenilor: