NaN

NaN ( eng.  Not-a-Number , "ei numero", ei numero ) on yksi liukulukuluvun erikoistiloista . Käytetään monissa matemaattisissa kirjastoissa ja matemaattisissa apuprosessoreissa . Tämä tila voi esiintyä eri tapauksissa, esimerkiksi kun edellinen matemaattinen operaatio päättyi määrittelemättömään tulokseen tai jos muistisoluun on päässyt luku, joka ei täytä ehtoja.

IEEE 754 -standardin mukaisesti tämä tila määritetään asettamalla eksponentti varattuun arvoon 11 ... 11 ja mantissa  mihin tahansa muuhun kuin 0 (varattu arvo koneen äärettömyydelle ). Merkki ja mantissa voivat sisältää lisätietoa: monet kirjastot tuottavat "negatiivisen" NaN:n muodossa -NaN.

Toimintoja, jotka tuottavat NaN:n tuloksena, ovat mm.

Ominaisuudet

NaN ei ole yhtä suuri kuin mikään muu arvo (ei edes itse). Tästä johtuen yksi yleisimmistä, mutta ei ilmeisistä tavoista tarkistaa NaN:n tulos on verrata tuloksena olevaa arvoa itseensä. Läpinäkyvämpi ja selkeämpi tapa on kutsua toiminto tarkistaakseen NaN:n numeron - isnanuseimmissa ohjelmointikielissä.

Muiden vertailuoperaattoreiden käyttäytyminen vaihtelee kielten mukaan. Jotkut kielet valehtelevat [3] (joten ne a < bkäyttäytyvät b > aeri tavalla NaN:n kanssa), toiset muodostavat poikkeuksen jopa "hiljaiselle" NaN:lle.

Mikä tahansa ei-triviaali toiminto, joka ottaa "hiljaisen" NaN:n argumenttina, palauttaa aina NaN:n muiden argumenttien arvosta riippumatta. Ainoat poikkeukset tähän sääntöön ovat max()ja -funktiot min(), jotka palauttavat toisen argumentin arvon (muu kuin NaN).

Toteutusten ominaisuudet

Joissakin ohjelmointikielissä on "hiljainen" (qNaN) ja "signaali" (sNaN): ensimmäinen, joka osuu mihin tahansa toimintoon, palauttaa NaN:n, toinen herättää poikkeuksen . Yleensä "hiljainen" tai "signaali" määräytyy mantissan merkittävimmän bitin mukaan.

Standardin IEEE754-1985 mukaan 1 NaN :n pitäisi olla yhtä suuri kuin NaN, mutta useimmat matemaattiset kirjastot palauttivat arvon 1. Siksi 2008 standardissa tämän operaation tulos on 1.

Ei-numero voidaan näyttää eri tavoilla, esimerkiksi:

nan(ohjelmien tulostus C-, C++-kielellä) NaN(ECMAScript, Rust, C#) #SNAN, #QNAN tai #IND (Excel) +nan.0(Kaavio)

Kokonaisluku NaN

Useimmat kokonaislukujen esitykset eivät tue osoittamista, että luku on virheellinen. Tässä tapauksessa IEEE754-standardi määrää poikkeuksen, kun NaN muunnetaan kokonaisluvuksi. Joten Javassa tällainen operaatio tekee poikkeuksen java.lang.ArithmeticException. C:ssä tämä johtaa määrittelemättömään käyttäytymiseen, mutta on myös mahdollista heittää poikkeus ja palauttaa määrittelemätön arvo standardin edellyttämällä tavalla.

Perl - Math::BigIntkielipaketti käyttää "NaN" merkkijonoja, joita ei voi muuntaa numeroiksi.

> perl -mMath::BigInt -e "print Math::BigInt->new('foo')" NaN

Muistiinpanot

Kommentti

  1. ↑ 1 2 Jos tämän toiminnon suorittava kirjasto ei tue kompleksilukujen käyttöä tai sitä ei ole määritetty käyttämään .

Lähteet

  1. IEEE Computer Society. IEEE-standardi liukulukuaritmetiikkaa varten § 9.2.1   : päiväkirja . — IEEE, 2008. — 29. elokuuta. - ISBN 978-0-7381-5753-5 . - doi : 10.1109/IEEEESTD.2008.4610935 .
  2. Joissakin kielissä, kuten Pythonissa, operaation tulos on 1, ei NaN.
  3. NUM07-J. Älä yritä vertailla NaN-CERT Oracle Coding Standardin Java-CERT Secure Coding Standards -standardeja . Käyttöpäivä: 17. kesäkuuta 2016. Arkistoitu alkuperäisestä 29. heinäkuuta 2016.

Linkit