IEEE 754 - IEEE 754

Den IEEE Standard for Floating-Point Aritmetik ( IEEE 754 ) er en teknisk standard for floating-point aritmetik etableret i 1985 af Institute of Electrical and Electronics Engineers (IEEE). Standarden behandlede mange problemer, der findes i de forskellige floating-point implementeringer, der gjorde dem vanskelige at bruge pålideligt og bærbart . Mange hardware floating-point-enheder bruger IEEE 754-standarden.

Standarden definerer:

  • aritmetiske formater: sæt af binære og decimale flydende punktdata, som består af begrænsede tal (inklusive underskrevne nuller og subnormale tal ), uendelighed og særlige "ikke et tal" -værdier ( NaN )
  • udvekslingsformater: kodninger (bitstrenge), der kan bruges til at udveksle flydende punktdata i en effektiv og kompakt form
  • afrundingsregler: egenskaber, der skal opfyldes, når tal afrundes under regning og konverteringer
  • operationer: aritmetiske og andre operationer (såsom trigonometriske funktioner ) på aritmetiske formater
  • håndtering af undtagelser : indikationer på usædvanlige forhold (såsom division med nul , overløb osv. )

IEEE 754-2008 , udgivet i august 2008, indeholder næsten hele den originale IEEE 754-1985- standard plus IEEE 854-1987-standarden for Radix-uafhængig floating-point-aritmetik . Den nuværende version, IEEE 754-2019, blev offentliggjort i juli 2019. Det er en mindre revision af den tidligere version, der hovedsageligt indeholder præciseringer, fejlrettelser og nye anbefalede operationer.

Standard udvikling

Den første standard for floating-point-aritmetik, IEEE 754-1985 , blev udgivet i 1985. Den omfattede kun binær floating-point-aritmetik.

En ny version, IEEE 754-2008 , blev udgivet i august 2008 efter en syv-årig revisionsproces, ledet af Dan Zuras og redigeret af Mike Cowlishaw . Det erstattede både IEEE 754-1985 (binær floating-point-aritmetik) og IEEE 854-1987 Standard for Radix-Independent Floating-Point Arithmetic . De binære formater i den originale standard er inkluderet i denne nye standard sammen med tre nye grundformater, en binær og to decimaler. For at overholde den nuværende standard skal en implementering implementere mindst et af de grundlæggende formater som både et aritmetisk format og et udvekslingsformat.

Den internationale standard ISO/IEC/IEEE 60559: 2011 (med indhold identisk med IEEE 754-2008) er godkendt til vedtagelse gennem JTC1 /SC 25 i henhold til ISO/IEEE PSDO-aftalen og offentliggjort.

Den nuværende version, IEEE 754-2019 offentliggjort i juli 2019, er afledt af og erstatter IEEE 754-2008 efter en revisionsproces startet i september 2015, ledet af David G. Hough og redigeret af Mike Cowlishaw. Det indeholder hovedsageligt afklaringer (f.eks. TotalOrder ) og fejlrettelser (f.eks. MinNum ), men indeholder også nogle nye anbefalede operationer (f.eks. AugmentedAddition ).

Den internationale standard ISO /IEC 60559: 2020 (med indhold identisk med IEEE 754-2019) er godkendt til vedtagelse gennem JTC1 /SC 25 og offentliggjort.

Formater

Et IEEE 754 -format er et "sæt repræsentationer af numeriske værdier og symboler". Et format kan også omfatte, hvordan sættet er kodet.

Et flydende punktformat er angivet ved:

  • en base (også kaldet radix ) b , som enten er 2 (binær) eller 10 (decimal) i IEEE 754;
  • en præcision p ;
  • et eksponentområde fra emin til emax , med emin = 1 - emax for alle IEEE 754 -formater.

Et format omfatter:

  • Endelige tal, som kan beskrives med tre heltal: s  = et tegn (nul eller et), c  = en signifikant (eller koefficient ), der ikke har mere end p -cifre, når det skrives i basis b (dvs. et helt tal i området til 0 til b p  - 1), og q  = en eksponent,eminq  +  p  - 1 ≤ emax . Den numeriske værdi af et sådant begrænset tal er (-1) s × c × b q . Desuden er der to nulværdier, kaldet signerede nuller : tegnbitten angiver, om et nul er +0 (positivt nul) eller −0 (negativt nul).
  • To uendeligheder: +∞ og −∞.
  • To slags NaN (ikke-et-tal): et stille NaN (qNaN) og et signalering NaN (sNaN).

For eksempel, hvis b = 10, p = 7 og emax = 96, så emin = -95, opfylder betydningen 0 ≤ c9 999 999 , og eksponenten opfylder −101 ≤ q ≤ 90. Derfor er det mindste ikke-nul positive tal, der kan repræsenteres 1 × 10 −101 , og det største er 9999999 × 10 90 (9.999999 × 10 96 ), så hele talområdet er −9.999999 × 10 96 til 9.999999 × 10 96 . Tallene - b 1− emax og b 1− emax (her, −1 × 10 −95 og 1 × 10 −95 ) er de mindste (i størrelse) normale tal ; ikke-nul tal mellem disse mindste tal kaldes subnormale tal .

Repræsentation og kodning i hukommelsen

Nogle tal kan have flere mulige eksponentielle formatrepræsentationer. For eksempel, hvis b  = 10 og p  = 7, så kan −12.345 repræsenteres med −12345 × 10 −3 , −123450 × 10 −4 og −1234500 × 10 −5 . For de fleste operationer, såsom aritmetiske operationer, afhænger resultatet (værdi) imidlertid ikke af repræsentationen af ​​input.

For decimalformaterne er enhver repræsentation gyldig, og sættet af disse repræsentationer kaldes en kohort . Når et resultat kan have flere repræsentationer, angiver standarden, hvilket medlem af kohorten der vælges.

For de binære formater gøres repræsentationen unik ved at vælge den mindste repræsentable eksponent, der tillader værdien at blive repræsenteret nøjagtigt. Eksponenten repræsenteres ikke direkte, men en bias tilføjes, så den mindste repræsentable eksponent er repræsenteret som 1, hvor 0 bruges til subnormale tal. For tal med en eksponent i det normale område (eksponentfeltet er hverken alle eller alle nuller) vil den forreste bit af betydningen altid være 1. Følgelig kan en ledende 1 impliceres snarere end eksplicit til stede i hukommelseskodningen, og under standarden vil den eksplicit repræsenterede del af betydningen ligge mellem 0 og 1. Denne regel kaldes førende bitkonvention , implicit bitkonvention eller skjult bitkonvention . Denne regel tillader det binære format at have en ekstra smule præcision. Den førende bitkonvention kan ikke bruges til de subnormale tal, da de har en eksponent uden for det normale eksponentområde og skala med den mindste repræsenterede eksponent, som den bruges til de mindste normale tal.

På grund af muligheden for flere kodninger (i hvert fald i formater kaldet udvekslingsformater ) kan et NaN bære andre oplysninger: en tegnbit (som ikke har nogen betydning, men kan bruges af nogle operationer) og en nyttelast , som er beregnet til diagnostik oplysninger, der angiver kilden til NaN (men nyttelasten kan have andre anvendelser, såsom NaN-boksning ).

Grundlæggende og udvekslingsformater

Standarden definerer fem grundlæggende formater, der er opkaldt efter deres numeriske base og antallet af bits, der bruges i deres udvekslingskodning. Der er tre binære flydende punkt grundformater (kodet med 32, 64 eller 128 bit) og to decimal flydende punkt grundformater (kodet med 64 eller 128 bit). De binary32 og binary64 formater er de enkelte og dobbelte formater af IEEE 754-1985 hhv. En konform implementering skal fuldt ud implementere mindst et af de grundlæggende formater.

Standarden definerer også udvekslingsformater , som generaliserer disse grundlæggende formater. For de binære formater kræves den førende bitkonvention. Følgende tabel opsummerer de mindste udvekslingsformater (inklusive de grundlæggende).

Navn Almindeligt navn Grundlag Betydelige bits eller cifre Decimaltal Eksponent bits Decimal E max Eksponent bias E min E maks Noter
binært16 Halv præcision 2 11 3,31 5 4.51 2 4 −1 = 15 −14 +15 ikke grundlæggende
binært 32 Enkelt præcision 2 24 7.22 8 38,23 2 7 −1 = 127 −126 +127
binære64 Dobbelt præcision 2 53 15,95 11 307,95 2 10 −1 = 1023 −1022 +1023
binært 128 Firdobbelt præcision 2 113 34.02 15 4931,77 2 14 −1 = 16383 −16382 +16383
binært256 Octuple præcision 2 237 71,34 19 78913.2 2 18 −1 = 262143 −262142 +262143 ikke grundlæggende
decimal32 10 7 7 7,58 96 101 −95 +96 ikke grundlæggende
decimal64 10 16 16 9.58 384 398 −383 +384
decimal128 10 34 34 13.58 6144 6176 −6143 +6144

Bemærk, at i tabellen ovenfor er de angivne minimumseksponenter for normale tal; den særlige subnormale talrepræsentation gør det muligt at repræsentere endnu mindre tal (med et vis tab af præcision). For eksempel er det mindste positive tal, der kan repræsenteres i binary64, 2 −1074 ; bidrag til −1074 -tallet inkluderer E min -værdien −1022 og alle på nær én af de 53 signifikante bits (2 −1022 - (53 - 1)  = 2 −1074 ).

Decimalcifre er cifre × log 10 base . Dette giver en omtrentlig præcision i antal decimalcifre.

Decimal E max er Emax × log 10 base . Dette giver en omtrentlig værdi af den maksimale decimaleksponent.

Binary32 (single) og binary64 (double) formaterne er to af de mest almindelige formater, der bruges i dag. Nedenstående figur viser den absolutte præcision for begge formater over en række værdier. Dette tal kan bruges til at vælge et passende format givet den forventede værdi af et tal og den krævede præcision.

Præcision af binary32 og binary64 i området 10 −12 til 10 12


Et eksempel på et layout til 32-bit flydende punkt er

Float eksempel.svg

og 64 bit layout er ens .

Udvidede og udvidelige præcisionsformater

Standarden angiver valgfri udvidede og udvidelige præcisionsformater, som giver større præcision end grundformaterne. Et udvidet præcisionsformat udvider et grundlæggende format ved at bruge mere præcision og mere eksponentområde. Et udvideligt præcisionsformat gør det muligt for brugeren at specificere præcisionen og eksponentområdet. En implementering kan bruge den interne repræsentation, den vælger til sådanne formater; alt, hvad der skal defineres, er dets parametre ( b , p og emax ). Disse parametre beskriver entydigt det sæt af begrænsede tal (kombinationer af tegn, betydning og eksponent for det givne radix), som det kan repræsentere.

Standarden anbefaler, at sprogstandarder giver en metode til at specificere p og emax for hver understøttet base b . Standarden anbefaler, at sprogstandarder og implementeringer understøtter et udvidet format, der har en større præcision end det største grundformat, der understøttes for hvert radix b . For et udvidet format med en præcision mellem to grundformater skal eksponentområdet være lige så stort som det næste bredere grundformat. Så for eksempel skal et 64-bit udvidet præcisions binært tal have et 'emax' på mindst 16383. Det x87 80-bit udvidede format opfylder dette krav.

Udvekslingsformater

Udvekslingsformater er beregnet til udveksling af floating-point data ved hjælp af en bitstreng med fast længde for et givet format.

Binær

Til udveksling af binære floating-point tal defineres udvekslingsformater med længde 16 bit, 32 bit, 64 bit og ethvert multiplum af 32 bit ≥ 128. 16-bit formatet er beregnet til udveksling eller lagring af små tal (f.eks. Til grafik).

Kodningsskemaet for disse binære udvekslingsformater er det samme som for IEEE 754-1985: en tegnbit, efterfulgt af w eksponentbits, der beskriver eksponenten forskudt af en bias , og p  -1 bits, der beskriver betydningen. Eksponentfeltets bredde for et k -bit-format beregnes som w  = runde (4 log 2 ( k ))-13. De eksisterende 64- og 128-bit formater følger denne regel, men 16- og 32-bit formater har flere eksponentbits (henholdsvis 5 og 8) end denne formel ville give (henholdsvis 3 og 7).

Som med IEEE 754-1985 er feltet bias-eksponent fyldt med alle 1 bits for at angive enten uendeligt (efterfølgende betydningsfelt = 0) eller et NaN (efterfølgende betydningsfelt ≠ 0). For NaN'er skelnes stille NaN'er og signal -NaN'er ved udelukkende at bruge den mest betydningsfulde bit af det efterfølgende betydningsfelt, og nyttelasten bæres i de resterende bits.

Decimal

Til udveksling af decimal floating-point tal defineres udvekslingsformater for et vilkårligt multiplum af 32 bit. Som med binær udveksling koder kodningsskemaet for decimaludvekslingsformaterne tegnet, eksponenten og betydningen. To forskellige bit-niveau-kodninger er defineret, og udveksling er kompliceret af, at der kan være behov for en ekstern indikator for den anvendte kodning.

De to valgmuligheder gør det muligt at markere kodningen som en komprimeret sekvens af decimalcifre ved hjælp af tætpakket decimal eller alternativt som et binært heltal . Førstnævnte er mere praktisk til direkte hardwareimplementering af standarden, mens sidstnævnte er mere velegnet til softwareemulering på en binær computer. I begge tilfælde er antallet af tal (kombinationer af tegn, signifikant og eksponent), der kan kodes, identisk, og særlige værdier (± nul med minimumseksponenten, ± uendeligt, stille NaN'er og signalering NaN'er) har identiske kodninger.

Afrundingsregler

Standarden definerer fem afrundingsregler. De to første regler runde til en nærmeste værdi; de andre kaldes dirigerede afrundinger :

Afrundinger til nærmeste

  • Rund til nærmeste, binder til lige  - runder til den nærmeste værdi; hvis tallet falder midtvejs, afrundes det til den nærmeste værdi med et endda mindst betydende ciffer; dette er standard for binært flydende punkt og den anbefalede standard for decimal.
  • Rund til nærmeste, binder væk fra nul  - runder til den nærmeste værdi; hvis tallet falder midtvejs, afrundes det til den nærmeste værdi ovenfor (for positive tal) eller under (for negative tal); dette er tænkt som en mulighed for decimal flydende punkt.

Rettede afrundinger

  • Rund mod 0  - rettet afrunding mod nul (også kendt som afkortning ).
  • Rund mod +∞  - rettet afrunding mod positiv uendelig (også kendt som afrunding eller loft ).
  • Rund mod −∞  - rettet afrunding mod negativ uendelighed (også kendt som afrunding ned eller gulv ).
Eksempel på afrunding til heltal ved hjælp af IEEE 754 -reglerne
Mode Eksempelværdi
+11,5 +12,5 -11,5 −12,5
til nærmeste, bånd til selv +12,0 +12,0 −12,0 −12,0
til nærmeste, binder væk fra nul +12,0 +13,0 −12,0 -13,0
mod 0 +11,0 +12,0 -11,0 −12,0
mod +∞ +12,0 +13,0 -11,0 −12,0
mod −∞ +11,0 +12,0 −12,0 -13,0

Medmindre andet er angivet, bestemmes floating-point-resultatet af en operation ved at anvende afrundingsfunktionen på det uendeligt præcise (matematiske) resultat. En sådan operation siges at være korrekt afrundet . Dette krav kaldes korrekt afrunding .

Nødvendige operationer

Påkrævede handlinger for et understøttet aritmetisk format (inklusive de grundlæggende formater) omfatter:

  • Aritmetiske operationer (add, subtraher, multiplicer, divider, square root, fused multiply – add , rest)
  • Konverteringer (mellem formater, til og fra strenge osv. )
  • Skalering og (for decimal) kvantisering
  • Kopiering og manipulation af skiltet (abs, neger osv. )
  • Sammenligninger og samlet bestilling
  • Klassificering og test for NaN'er osv.
  • Test og indstilling af flag
  • Diverse operationer.

Sammenligning prædikater

Standarden giver sammenligningsprædikater for at sammenligne et flydende punktdato med et andet i det understøttede aritmetiske format. Enhver sammenligning med et NaN behandles som uordnet. −0 og +0 sammenlignes som lige.

Totalordnende prædikat

Standarden giver et prædikat totalOrder , som definerer en samlet rækkefølge på kanoniske medlemmer af det understøttede aritmetiske format. Prædikatet er enig med sammenligningens prædikater, når det ene flydende tal er mindre end det andet. Den totalOrder prædikat pålægger ikke en samlet bestilling på alle kodninger i et format. Især skelner den ikke mellem forskellige kodninger af den samme floating-point-repræsentation, som når en eller begge kodninger er ikke-kanoniske. IEEE 754-2019 indeholder præciseringer af totalOrder .

For de binære udvekslingsformater, hvis kodning følger IEEE 754-2008-anbefalingen om placering af NaN-signaleringsbiten , er sammenligningen identisk med en, der skriver, flyder punkttalene til et heltegn med tegn (størrelse under forudsætning af en nyttelastbestilling i overensstemmelse med denne sammenligning), et gammelt trick til FP -sammenligning uden en FPU.

Undtagelseshåndtering

Standarden definerer fem undtagelser, som hver returnerer en standardværdi og har et tilsvarende statusflag, der rejses, når undtagelsen opstår. Ingen anden undtagelseshåndtering er påkrævet, men yderligere ikke-standardalternativer anbefales (se § Alternativ håndtering af undtagelser ).

De fem mulige undtagelser er:

  • Ugyldig operation: matematisk udefineret, fx kvadratroden af ​​et negativt tal. Som standard returnerer qNaN.
  • Division med nul: en operation på endelige operander giver et nøjagtigt uendeligt resultat, f.eks . 1/0 eller log (0). Som standard returnerer ± uendelighed.
  • Overflow: et endelig resultat er for stort til at blive repræsenteret nøjagtigt ( dvs. dets eksponent med et ubegrænset eksponentinterval ville være større end emax ). Som standard returnerer ± uendelighed for rund-til-nærmeste tilstande (og følger afrundingsreglerne for de rettede afrundingstilstande).
  • Underflow: et resultat er meget lille (uden for det normale område). Som standard returnerer et tal mindre end eller lig med det mindste positive normale tal i størrelse (efter afrundingsreglerne); en subnormal indebærer altid en underskudsundtagelse, men som standard er der ikke flag, hvis det er nøjagtigt.
  • Inexact: det nøjagtige ( dvs. uafrundede) resultat repræsenteres ikke nøjagtigt. Som standard returnerer det korrekt afrundede resultat.

Det er de samme fem undtagelser, som blev defineret i IEEE 754-1985, men divisionen med nul undtagelse er blevet udvidet til andre operationer end divisionen.

Nogle decimaler med flydende punktsimplementeringer definerer yderligere undtagelser, som ikke er en del af IEEE 754:

  • Clamped: et resultat eksponent er for stort til destinationsformatet. Som standard tilføjes efterfølgende nuller til koefficienten for at reducere eksponenten til den største anvendelige værdi. Hvis dette ikke er muligt (fordi dette ville medføre, at antallet af cifre, der skal bruges, er mere end destinationsformatet), sker der en overløbsundtagelse.
  • Afrundet: et resultats koefficient kræver flere cifre end destinationsformatet giver. En unøjagtig undtagelse signaleres, hvis eventuelle ikke-nul cifre kasseres.

Desuden vil operationer som f.eks. Kvantificering, når en operand er uendelig, eller når resultatet ikke passer til destinationsformatet, også signalere ugyldig driftsundtagelse.

Anbefalinger

Alternativ håndtering af undtagelser

Standarden anbefaler valgfri undtagelseshåndtering i forskellige former, herunder forudsubstitution af brugerdefinerede standardværdier og fælder (undtagelser, der ændrer kontrolstrømmen på en eller anden måde) og andre undtagelseshåndteringsmodeller, der afbryder strømmen, f.eks. Forsøg/fangst. Fælderne og andre undtagelsesmekanismer forbliver valgfri, som de var i IEEE 754-1985.

Anbefalede operationer

Punkt 9 i standarden anbefaler yderligere matematiske operationer, som sprogstandarder bør definere. Ingen kræves for at overholde standarden.

Anbefalede aritmetiske operationer, som skal afrundes korrekt:

De asinPi , acosPi og tanPi funktioner var ikke en del af IEEE 754-2008 standard, fordi de blev anset for mindre nødvendig. asinPi , acosPi blev nævnt, men dette blev betragtet som en fejl. Alle tre blev tilføjet i revisionen i 2019.

De anbefalede operationer omfatter også indstilling og adgang til afrundingsretning i dynamisk tilstand og implementeringsdefinerede vektorreduktionsoperationer såsom sum, skaleret produkt og prikprodukt , hvis nøjagtighed ikke er specificeret af standarden.

Fra 2019 anbefales også forstærket regning til de binære formater. Disse operationer, der er specificeret for addition, subtraktion og multiplikation, producerer et par værdier, der består af et resultat, der er korrekt afrundet til nærmeste i formatet og fejlbetegnelsen, som kan repræsenteres nøjagtigt i formatet. På tidspunktet for offentliggørelse af standarden kendes ingen hardwareimplementeringer, men meget lignende operationer blev allerede implementeret i software ved hjælp af kendte algoritmer. Historien og motivationen for deres standardisering forklares i et baggrundsdokument.

Fra 2019 slettes de tidligere krævede minNum, maxNum, minNumMag og maxNumMag i IEEE 754-2008 nu på grund af deres ikke-associativitet. I stedet anbefales to sæt nye minimums- og maksimumsoperationer . Det første sæt indeholder minimum, minimumNummer, maksimum og maksimumNummer . Det andet sæt indeholder minimumMagnitude, minimumMagnitudeNumber, maximumMagnitude og maximumMagnitudeNumber . Historien og motivationen for denne ændring forklares i et baggrundsdokument.

Udtryksevaluering

Standarden anbefaler, hvordan sprogstandarder skal specificere semantikken i sekvenser af operationer, og peger på finesser ved bogstavelige betydninger og optimeringer, der ændrer værdien af ​​et resultat. I modsætning hertil forlod den tidligere 1985 -version af standarden aspekter af sproggrænsefladen uspecificerede, hvilket førte til inkonsekvent adfærd mellem kompilatorer eller forskellige optimeringsniveauer i en optimerende kompilator .

Programmeringssprog bør give en bruger mulighed for at angive en minimumspræcision for mellemliggende beregninger af udtryk for hver radix. Dette kaldes foretrukket bredde i standarden, og det bør være muligt at indstille dette pr. Blok. Mellemliggende beregninger inden for udtryk skal beregnes, og eventuelle midlertidige gemmes ved hjælp af maksimum for operandernes bredde og den foretrukne bredde, hvis den er indstillet. Således bør f.eks. En kompiler, der målretter mod x87 hardware med flydende punkter, have et middel til at specificere, at mellemliggende beregninger skal bruge det dobbeltudvidede format . Den lagrede værdi af en variabel skal altid bruges ved evaluering af efterfølgende udtryk, snarere end nogen forløber fra før afrunding og tildeling til variablen.

Reproducerbarhed

IEEE 754-1985-versionen af ​​standarden tillod mange variationer i implementeringer (f.eks. Kodning af nogle værdier og påvisning af visse undtagelser). IEEE 754-2008 har reduceret disse kvoter, men der er stadig et par variationer (især for binære formater). Reproducerbarhedsklausulen anbefaler, at sprogstandarder skal være et middel til at skrive reproducerbare programmer (dvs. programmer, der vil producere det samme resultat i alle implementeringer af et sprog) og beskriver, hvad der skal gøres for at opnå reproducerbare resultater.

Karakterrepræsentation

Standarden kræver, at operationer konverteres mellem grundlæggende formater og eksterne tegnsekvensformater . Konvertering til og fra et decimaltegnsformat er påkrævet for alle formater. Konvertering til en ekstern tegnsekvens skal være sådan, at konvertering tilbage ved hjælp af runde til nærmeste, bånd til even vil gendanne det originale nummer. Der er ikke noget krav om at bevare nyttelasten for et stille NaN eller signalering NaN, og konvertering fra den eksterne tegnsekvens kan gøre et signalerende NaN til et stille NaN.

Den oprindelige binære værdi bevares ved at konvertere til decimal og tilbage igen ved hjælp af:

  • 5 decimalcifre for binær16,
  • 9 decimalcifre for binary32,
  • 17 decimalcifre for binary64,
  • 36 decimalcifre for binær128.

For andre binære formater er det krævede antal decimalcifre

hvor p er antallet af signifikante bits i det binære format, f.eks. 237 bit for binær256.

Når du bruger et flydende decimalformat, bevares decimalrepræsentationen ved hjælp af:

  • 7 decimalcifre for decimal32,
  • 16 decimaler for decimal64,
  • 34 decimalcifre for decimal128.

Algoritmer, med kode, til korrekt afrundet konvertering fra binær til decimal og decimal til binær diskuteres af Gay og til test - af Paxson og Kahan.

Se også

Noter

Referencer

Standarder

Sekundære referencer

Yderligere læsning

eksterne links