Bouwstenen voor PSE Datatypes en Datastructuren
Definitie Datatype Klasse van dataobjecten tesamen met operaties om ze te construeren, te manipuleren en te verwijderen. Een datatype omvat een specificatie en een implementatie. Specificatie attributen, waarden range, operaties. Implementatie representatie en operatie.
Datatypes Datatype Enumeratie Benadering Integers Characters Lijsten RR Enige voorbeelden
Datatypes Getallen stelsels binair, octaal, headecimaal,.. (Mathematica: BaseForm) Characters/Lijsten ASCII, EBCDIC, willekeurige samenhangende types R Intrinsiek niet representeerbare grootheid. HTML Tekst, images, geluid, video,.
Integers Gehele getallen: N bits [- N-, N- -] Let op het interval is niet symmetrisch Associatieve en distributieve relaties hoeven niet te gelden: (grootste_positieve_getal + ) = ongedefinieerd (grootste_positieve_getal - ) + = gedefinieerd Attributen: +, -, *, /,
Integers (cont) C short, int, long Ecel convert on display Mathematica one type fits all C Geen fout, maar wel een grens aan het grootste getal, daarboven vreemde effecten (bv: 3 bits ^3 mogelijkheden) Mathematica schijnbaar niet beperkt in grootte representatie. Ecel Convert voor display naar type
Characters/Strings ASCII character set (7 of 8 bits code, maakt verschil) C weinig support behalve macro s vage notie van characters (<ctype.h> ToLower, IsAscii, ) Ecel Enige support voor strings Mathematica ToCharacterCode[ ] StringLength, String.
Rationele Getallen (scaled integers/fied point) C Geen support Mathematica Intrinsiek Voordeel Geen afrondingsfouten Nadeel Schaling is probleem van gebruiker.
Floating Point Getallen Floating point getallen Altijd een benadering van de echte waarde! Notatie = m r e Er is een maimale nauwkeurigheid (machine nauwkeurigheid, hardware) m = mantisse, r = radi, e = eponent Normalisatie: /r <= m < Er is een grootste getal en een kleinste getal.
FP formaten (hardware) S Ep Mantisse 8 3 S Ep Mantisse Mantisse 0 3 Nauwkeurigheid: op ^-3 resp op ^-5.90989550785`*^-7.0446049503308`*^-6
Standaardisatie Floating Point IEEE 754 Standaard Formaat Data Lengte Implementatie Single precision 3-bits Verplicht Single etended > 4 bits Aanbevolen Double precisie 64 bits Aanbevolen Double etended > 78 bits Aanbevolen
FP karakteristieken Floating Point Values Single Double E ma +7 +03 E min -6-0 Eponent bias Eponent size Size (bits) Ma pos. value Min pos. value +7 8 3 3.4 0 38.4 0-45 +03 64.8 0 308 4.9 0-34
Afrondingsfout Begrensd in gevallen van: optellen (behalve bij getallen met tegengesteld teken), vermenigvuldigen, delen,. Onbegrensd in geval van: aftrekken! (cancellation error) N r m m m = + = Error m ε
Afleiding ) ( ˆ ε + = ) ( ˆ ε + = ) ( ) ( ˆ ˆ ˆ ε ε + + = = Δ ) ( )( η + = = ε ε η ) ( ) ( + = ε ε ε η + ε
Dus: Afronding er bestaat een b zodanig dat geldt: a + b = a maar: dit is een procentuele fout! Cancellation altijd als je het niet kunt gebruiken!
Voorbeeld: afgeleide Uitgangspunt: Mathematische fout (Taylor reeks) e t = hf' '( ) f '( ) f ( + h) lim h = h 0 ( e + e ) = 0 t r h Totale fout f ( ) e r = h e f ef Afrondings fout (numeriek) f ( ) h Minimum ( f / f '')
Voorbeeld: afgeleide (cont) e totaal / f ' e (( ff '')/ f ' ) f e f Er bestaat een optimale waarde voor h Voor single precision maar 3 (!) decimalen nauwkeurig. Hogere nauwkeurigheid: betere benadering en/of meer significante digits.
Voorbeeld: afgeleide (3) f f 3 h ( + h) = f ( ) + hf'( ) + h f ''( ) + 6 f '''( ) + ho.. 3 h ( h) = f ( ) hf'( ) + h f ''( ) 6 f '''( ) + ho.. 3 h f + h) f ( h) = hf'( ) + f '''( ) + ho.. ( 3 Conclusie: je wint in mathematische nauwkeurigheid als je meer functiewaarden meeneemt (maar je moet ook meer rekenen)
Voorbeeld: afgeleide (4) 0-0 -4 Total error (relative) 0-6 0-8 0-0 0-0 -0 0-8 0-6 0-4 0 - h (relative) Appro. O(h ) O(h) Grafische representatie van nauwkeurigheid
Structuren
Data Structuren Moeten vertaling van probleem naar algoritme mogelijk maken. Kunnen voorkennis van een specifiek probleem veld gebruiken Er zijn een aantal universele structuren in PSE s.
Vector/Array (Gelinkte lijst) Lijst Stack Boom
Vector/Array Vertaling van mathematische begrip, Samenhangend gebied met uniforme -elementen, Basis bouwsteen voor lineaire algebra (routines), Speciale klasse voor Arrays met veel nul-elementen (sparse).
Enige implementaties C/Fortran Alleen numeriek met linearisatie van elementen. Probleem is scheiding van data en specificatie. Mathematica Zowel numerieke als symbolische representaties. Ook operaties zijn eveneens numeriek als symbolisch. Ecel Zeer beperkte implementatie van het begrip matri als rechthoek van cellen. Alleen numerieke operaties en de grootte moet van te voren bekend zijn.
Lijst inhoud cell Inhoud cell inhoud cell start Grafische voorbeeld van een enkelvoudig gelinkte lijst. einde Cellen hoeven niet homogeen te zijn, Geheugen allocatie hoeft niet homogeen te zijn, Aantal operaties op lijsten zijn heel efficiënt, Lijsten zijn een niet-statische structuur,
Mathematica (intern) en lijsten Alles is een lijst, bv. Head[] = Integer Head[{,, 4}] = List Head[++a] = Plus[3,a] FullForm[Epressie] Operatie[elt, elt,., elt n ] = elt operatie elt operatie FullForm[+p(q+r)] Complee epressies geven geneste lijsten Plus[Times[p,Plus[q,r]],]
Stack push pop LIFO: Last In First Out Omkering van de volgorde
Stack Gebruik Opslaan van tussentijdse resultaten
Queue push pop FIFO: First In First Out Behoud van de volgorde
Boom (binair) 4 6 3 5 7