Pe măsură ce numărul de rotunjire la o precizie predeterminată datorită conceptului de cifre semnificative. Rotunjirea la numărul dorit de cifre semnificative este diferită de rotunjiri convențională la numărul de zecimale dorit?
Faptul că zecimalele și cifre semnificative sunt concepte diferite.
Cu alte cuvinte, cifre semnificative (sau cei mai semnificativi biți), acestea sunt cifrele din care aceasta exprimă cu precizia necesară. În acest caz, numărul de cifre pot fi rotunjite. Sunt definite ca orice număr de cifre, începând cu prima din stânga, diferit de zero, la ultima, corectitudinea, care poate garanta (dicționare și enciclopedii pe academicianul).
Prin urmare, majoritatea de calcul critice în statistici, precum și de inginerie și industriile științifice, a fost realizat până la un anumit număr de cifre semnificative.
Declarația acestei probleme este destul de simplu.
Pe parcursul diferitelor măsurători și calcule rezultat se obține de obicei sub forma unui număr. În conformitate cu cerințele de acuratețe, acest număr ar trebui să fie rotunjit la numărul corespunzător de cifre semnificative.
Primul lucru pentru a începe cu este de a determina ordinea numărului și numărul total de zecimale.
În cazul în care numărul de zecimale coincide cu numărul dorit de cifre semnificative, algoritmul în această lucrare este finalizată. Puteți reveni rezultatul (egal cu numărul inițial). Dar o astfel de cazuri - excepție.
În alte cazuri, doriți să o rotunjire. Din fericire, această problemă poate fi ușor redusă la rotunjirii normal la numărul specificat de zecimale. Pentru a face acest lucru:
- Împărțiți de 10 pentru a rotunji cifrele în măsura egală cu ordinea sa;
- Runda rezultatul la numărul de zecimale egal cu numărul dorit de cifre semnificative minus 1;
- Înmulțiți rezultatul de rotunjire la 10 grade egale cu ordinea numărului inițial.
Pentru claritate, mai jos sunt exemple de rotunjire la numărul specificat de cifre semnificative în limbajul de programare Delphi, C # și Java.
EXEMPLU Delphi:
[Cod lang = »delphi»] Funcția GetSignificationDigit (săpăturilor: integer; d: dublu): dublu;
var
r, dp, dd: dublu;
magnitudeOfNumber, numberOfDigits: integer;
începe
// Număr de comandă
magnitudeOfNumber: = Etaj (Log10 (d));
// total zecimale
numberOfDigits: = ceil (Log10 (d));
if (numberOfDigits = digs) atunci
// În cazul în care numărul de cifre egal cu numărul de cifre semnificative
r: = d
altfel
începe
// Dacă nu există nici
dp: = Putere (10, magnitudeOfNumber);
dd: = Putere (10, se angrenează - 1);
r: = d / dp;
r: = (Round (r * dd) / dd) * dp;
se încheie;
Rezultatul: = r;
end; [/ code]
[Cod lang = »c-sharp»] getSignificationDigit dublu privat (int săpăturilor, double d)
r dublu;
// Număr de comandă
int magnitudeOfNumber = (int) Math.floor (Math.Log10 (d));
// total zecimale
int numberOfDigits = (int) Math.Ceiling (Math.Log10 (d));
if (numberOfDigits ==) digs
// În cazul în care numărul de cifre egal cu numărul de cifre semnificative
r = d;
>
altfel
// Dacă nu există nici
double dp = Math.pow (10, magnitudeOfNumber);
double dd = Math.pow (10, se angrenează - 1);
r = d / dp;
r = (Math.round (r * dd) / dd) * dp;
>
întoarce r;
> [/ Code]
[Code lang = »java»] getSignificationDigit dublu privat (int săpăturilor, double d) double r;
// Număr de comandă
int magnitudeOfNumber = (int) Math.floor (Math.log10 (d));
// total zecimale
int numberOfDigits = (int) Math.ceil (Math.log10 (d));
if (numberOfDigits ==) digs
// În cazul în care numărul de cifre egal cu numărul de cifre semnificative
r = d;
>
altfel
// Dacă nu există nici
double dp = Math.pow (10, magnitudeOfNumber);
double dd = Math.pow (10, se angrenează-1);
r = d / dp;
>
întoarce r;
> [/ Code]
Pentru a rotunji numărul necesar de cifre semnificative utilizate tipul de date reale. Prin urmare, oricare ar fi precizia de rotunjire, rezultatul va conține întotdeauna o anumită eroare. În acest caz, ordinea de mai mică decât numărul inițial, astfel încât această eroare este de remarcat.
În măsura în care acest lucru este critică, în funcție de specificul calculelor sau a măsurătorilor efectuate. În calculele de inginerie este de obicei destul de acceptabil. Cu atât mai mult că acuratețea lor este rareori mai mult de 3-4 cifre semnificative. În același timp, pentru calcule financiare care necesită sume de bani compara, astfel de costuri nu sunt permise. De asemenea, prezența de eroare poate afecta precizia calculelor științifice și calcule cu cerințe ridicate de precizie.
In multe limbaje de programare au o zecimală tip special de date, sau altele asemenea, care ameliorează această problemă. Dar, în general, impactul erorilor cauzate de specificul tipurilor de date reale este necesar, oricum, să se ia în considerare.