IBM:n Aix-koneet suorittavat liukulukulaskennan aina kaksinkertaisella
tarkkuudella. Tietenkin jos laskennan tulos tallennetaan
REAL-tyyppiseen muuttujaan, tarkkuutta katoaa. Yleensä uusia ohjelmia
tehtäessä kannattaa käyttää kaksoistarkkuuden reaalilukutyyppiä
DOUBLE PRECISION.
Kaksinkertainen tarkkuus aiheuttaa joskus yllätyksiä etenkin, jos ohjelmassa pyritään laskemalla määrittämään joitakin koneen aritmetiikan ominaisuuksia. Esimerkiksi seuraava funktio (joka on peräisin kirjasta Fortran 77) ei toimi halutulla tavalla Aix-koneissa:
REAL FUNCTION EPS()
EPS = 1
100 EPSNEW = EPS/2
IF (1+EPSNEW.EQ.1) RETURN
EPS = EPSNEW
GOTO 100
END
Tarkoitus on, että funktio määrittää kone-epsilonin, so. pienimmän
positiivisen reaaliluvun epsilon, jolle 1+epsilon on ykkösestä poikkeava.
Aix-koneessa kuitenkin funktio palauttaa kaksoistarkkuuden laskentaa
vastaavan kone-epsilonin, vaikka käytetyt muuttujat olisivat
REAL-tyyppisiä! Tämä johtuu siitä, että kone käyttää ehdon
1+EPSNEW.EQ.1 laskennassa kaksoistarkkuutta. Näin ei kävisi,
jos esim. sijoitettaisiin lausekkeen 1+EPSNEW
arvo REAL-tyyppiseen
apumuuttujaan ja käytettäisiin sitä IF-lauseessa. Helpompi tapa
estää tämäntapaiset yllätykset on kuitenkin käyttää kääntäjän optiota
-qrndsngl
joka aiheuttaa sen, että kone laskee yksinkertaisella tarkkuudella sellaiset liukulukulausekkeet, joiden operandit ovat yksinkertaista tarkkuutta.
XL Fortranissa (IBM:n Aix-koneiden Fortran) on tyyppi REAL*16 (ja XL C:ssä vastaava
tyyppi long double).
Nelinkertaisen tarkkuuden lukuvakioissa käytetään eksponenttikirjaimena Q:ta,
joten esim. 1.0Q0 esittää lukua yksi nelinkertaisen tarkkuuden vakiona.
Aix-koneissa kokonaisluvut ovat 32-bittisiä, joten kokonaislukujen arvoalue on -maxint-1 .. +maxint, missä
maxint = 2**31 - 1 = 2147483647
Aix-koneissa on käytössä IEEE-standardin mukainen reaalilukujen esitys.
Seuraava taulukko esittää eri reaalilukutyyppien lukualueet
(pienin positiivinen reaaliluku ja suurin reaaliluku) Aix-tietokoneissa.
Lukuarvot ovat tietysti pyöristettyjä. Käytämme
tässä reaalilukutyypeistä epästandardeja IBM-tyyppisiä nimiä,
joita XL Fortran ymmärtää: REAL*4 on sama kuin REAL
ja REAL*8
sama kuin DOUBLE PRECISION,
kun taas REAL*16 on standardiin
kuulumaton nelinkertaisen tarkkuuden reaalilukutyyppi.
Tyyppi Lukualue Aix-koneissa REAL*4 1.175*E-38 .. 3.403E+38 REAL*8 2.225D-308 .. 1.798D+308 REAL*16 4.941Q-324 .. 1.798Q+308
Kone-epsilon (pienin liukuluku, joka ykköseen lisättynä tuottaa ykkösestä poikkeavan tuloksen) on:
laskentatarkkuus kone-epsilon Aix-koneissa yksinkertainen tarkkuus 1.192E-7 kaksinkertainen tarkkuus 2.220D-16 nelinkertainen tarkkuus 4.940Q-324
Yleensä Aix-koneet eivät anna mitään ilmoituksia ylivuodoista, alivuodoista, nollalla jakamisista yms. numeerisen laskennan poikkeustilanteista (virhetilanteista).
Reaalilukuoperaatio, joka on matemaattisesti määrittelemätön tai
jonka tulos on koneen lukualueen ulkopuolella, tuottaa
IEEE-standardin
mukaisen suureen "infinity", "not a number" tms.,
joka formatoidusti tulostettuna ei näy lukuna vaan symbolisena
merkintänä NaNQ, INF tms.
Tavallisimpien aritmeettisten virheiden käsittely on tarkemmin sanottuna seuraava:
Trace/BPT trap (core dumped)
ja ohjelman suorituksen päättymisen. (Tämä virheilmoitus voi johtua
hyvin monesta muustakin syystä.)
EXP) laskennassa ovat
muutoin samanlaisia kuin reaalilukuoperaatiot mutta eivät välttämättä
aseta lippuja.
f77-komentoon optio -lmsaa, koska sen ansiosta saadaan
ajonaikaiset virheilmoitukset tilanteista, joissa
matemaattista standardifunktiota on kutsuttu argumentilla, joka
aiheuttaa laskennassa virhetilanteen. Virhetilanteita aiheuttavat
esimerkiksi SQRT-funktion kutsuminen negatiivisella argumentilla ja
EXP-funktion kutsuminen niin suurella argumentilla, että tulos
ei mahdu lukualueeseen.