Kerekítés az előírt pontossággal (egy előre meghatározott számú számjeggyel), Archer coder

Mivel az alkalmazottak száma kerekítés egy előre meghatározott pontossággal miatt a koncepció számjeggyel. A kerekítés a kívánt számú számjeggyel eltér a hagyományos kerekítési a kívánt számú tizedesjegy?

Az a tény, hogy a tizedes és számjeggyel különböző fogalmak.

Azaz, számjeggyel (vagy a legjelentősebb bit), ezek a számok, amelyek kifejezik azt a kívánt pontosságot. Ebben az esetben, a számjegyek száma lehet kerekíteni. Minősül minden olyan, a számjegyek száma, kezdve az első a bal oldalon, nullától eltérő, az utolsó, a helyességét, amely garantálja (szótárak és enciklopédiák az akadémikus).

Ezért a legtöbb kritikus számítástechnika a statisztikát, valamint a mérnöki és tudományos iparágak végeztünk egy bizonyos számú számjeggyel.

A nyilatkozat ezen probléma meglehetősen egyszerű.

Során különböző mérések és számítások eredményeként általában kapunk egy számot. Összhangban a pontossági követelmények, ezt a számot kell kerekíteni a megfelelő számú számjeggyel.

Az első dolog, hogy kezdődik, hogy meghatározza az, hogy a szám és az összes tizedes.

Ha a tizedesjegyek számát egybeesik a kívánt számú számjeggyel, az algoritmus ez a munka befejeződik. Akkor vissza az eredményt (megegyezik az eredeti szám). De az ilyen esetek - a kivétel.

Más esetekben, szeretne kerekítés. Szerencsére ez a probléma könnyen redukálható a szokásos kerekítési a megadott számú tizedesre. Ehhez:

  1. Osszuk 10 kerek számok mértékben megegyezik a sorrendben;
  2. Kerek az eredményt a tizedes helyek számát egyenlő a kívánt számú számjeggyel mínusz 1;
  3. Szorozzuk meg az eredményt a kerekítés 10 fok megegyezik a megbízás az eredeti számot.

Az egyértelműség kedvéért az alábbiakban példák kerekítés meghatározott számú számjeggyel a Delphi programozási nyelv, a C # és Java.

Példa a Delphi:

[Kód lang = »Delphi»] funkciót GetSignificationDigit (ás: integer; d: dupla): kettős;
var
R, DP, dd: kettős;
magnitudeOfNumber, numberOfDigits: integer;
kezdődik
// Tételszám
magnitudeOfNumber: = Szint (log10 (d));
// Összesen tizedessel
numberOfDigits: = Ceil (log10 (d));
ha (numberOfDigits = ás), majd
// Ha a számjegyek száma megegyezik a szignifikáns számjegyek száma
r: = d
más
kezdődik
// Ha nincs
DP: = Teljesítmény (10, magnitudeOfNumber);
dd: = Teljesítmény (10, ás - 1);
R: = d / dp;
R: = (Round (R * dd) / dd) * DP;
végén;

Eredmény: = R;
végén; [/ code]

[Kód lang = »c-éles»] privát kétágyas getSignificationDigit (int ás, kettős d)
Double R;
// Tételszám
int magnitudeOfNumber = (int) Math.Floor (Math.Log10 (d));
// Összesen tizedessel
int numberOfDigits = (int) Math.Ceiling (Math.Log10 (d));
if (numberOfDigits == ás)
// Ha a számjegyek száma megegyezik a szignifikáns számjegyek száma
r = d;
>
más
// Ha nincs
kettős dp = Math.pow (10, magnitudeOfNumber);
kettős dd = Math.pow (10, ás - 1);
r = d / dp;
R = (Math.Round (R * dd) / dd) * DP;
>
vissza R;
> [/ Code]

[Kód lang = »Java»] privát kétágyas getSignificationDigit (int ás, kettős d) Double R;
// Tételszám
int magnitudeOfNumber = (int) Math.floor (Math.log10 (d));
// Összesen tizedessel
int numberOfDigits = (int) Math.ceil (Math.log10 (d));
if (numberOfDigits == ás)
// Ha a számjegyek száma megegyezik a szignifikáns számjegyek száma
r = d;
>
más
// Ha nincs
kettős dp = Math.pow (10, magnitudeOfNumber);
kettős dd = Math.pow (10, ás-1);
r = d / dp;
>
vissza R;
> [/ Code]

Felhajt a szükséges számú számjeggyel használt valós adatok típusát. Ezért bármi a kerekítési pontosság, az eredmény mindig tartalmaz bizonyos hiba. Ebben az esetben a nagyságrendileg kevesebb, mint az eredeti szám, tehát ez a hiba észrevehető.

Amennyire ez a kritikus, attól függően, hogy a sajátosságait elvégzett számítások vagy mérések. A mérnöki számítások általában teljesen elfogadható. Annál is inkább, hogy a pontosság ritkán több, mint 3-4 számjeggyel. Ugyanakkor a pénzügyi számítások igénylő össze összegeket, ezeket a költségeket nem megengedett. Továbbá, a jelen hiba befolyásolhatja a pontosságot a tudományos számítások és a számítások nagy pontossági követelményeknek.

Sok programozási nyelvben speciális adattípus decimális, vagy hasonló, amely enyhíti a problémát. De általában, milyen hatással van a hibák okozta a pontos részletek a valódi adattípusok szükséges, különben is, hogy figyelembe vegyék.

Hozzászólás navigáció