Neskaičius (angl. not a number arba NaN) – informatikoje naudojama speciali konstanta, gaunama kuomet atliekamo veiksmo rezultatas matematiškai neapibrėžtas (pavyzdžiui, 1/0). Ji taip pat gaunama jei rezultatas yra iš esmės apibrėžtas (pavyzdžiui, ), tačiau konkretus procesorius šio veiksmo atlikti nesugeba (minėtame pavyzdyje reikalingas kompleksinių skaičių palaikymas).[1][2] [3]

Neskaičiai ir veiksmų su jais taisyklės įtrauktos į paplitusį IEEE 754 standartą, su jais gali dirbti Intel *87 koprocesorius (kuris vėliau tapo *86 serijos procesorių dalimi). Dėl šių priežasčių neskaičiai galimi daugelyje programavimo kalbų.

Veiksmai su neskaičiais redaguoti

Pagrindinės veiksmų su neskaičiais taisyklės yra tokios:

  • Bet kokio matematinio veiksmo su neskaičiumi rezultatas yra neskaičius (nepriklausomai nuo kitų operandų).
  • Neskaičius nėra lygus jokiam skaičiui ar neskaičiui.
  • Neskaičius nėra lygus ir sau pačiam. Vienas būdų patikrinti, ar negavome neskaičiaus, yra palyginti turimą reikšmę su pačia savimi (x==x).

Kai kurios funkcijos kartais gali grąžinti ir kitokią nei neskaičius reikšmę jei ji nuo parametru esančio neskaičiaus nepriklauso.[3] Tokių atvejų pavyzdžiai gali būti kėlimo laipsniu funkcija pow (kuomet 1NaN=1)[4] arba C++ funkcija hypot (kuomet   [5]).

Naujame IEEE 754r standarte numatytos dvi papildomos taisyklės:

  • Funkcija maxnum(a, b), grąžinanti didesnį iš dviejų savo parametrų, neskaičių laiko mažesniu už bet kurį kitą skaičių.
  • Funkcija minnum(a, b), grąžinanti mažesnį iš dvieju savo parametrų, neskaičių laiko didesniu už bet kurį kitą skaičių.

Kitaip tariant, jei vienas šių funcijų parametras yra neskaičius, o antras – įprastinis skaičius, visuomet grąžinamas įprastinis skaičius. Šios taisyklės patogios programuojant įvairius statistikos algoritmus.

IEEE 754 slankaus kablelio neskaičių saugojimo formatas redaguoti

Slankaus kablelio skaičiai turi normalizuotą trupmeninę ir neneigiamą eksponentinę dalis. Jei eksponentinės dalies visi bitai lygūs vienetui (speciali maksimali galima reikšmė) ir trupmeninė dalis nelygi nuliui, saugoma viso skaičiaus reikšmė laikoma neskaičiumi. Taigi yra ne vienas, bet labai daug (aštuoni milijonai 32 bitų formatui ir 4,5 bilijardo 64 bitų formatui) įvairių galimų neskaičių, kurių kiekvienas atitinka galimą nelygią nuliui trupmeninės dalies reikšmę.

Šaltiniai redaguoti

  1. NAN in Java. baeldung.com.
  2. IEEE Arithmetic. docs.oracle.com
  3. 3,0 3,1 20.5.2 Infinity and NaN. libc manual. gnu.org
  4. pow funkcijos dokumentacija (C++) [1]
  5. hypot funkcijos dokumentacija (C++) [2]