Dr.Godfried-Willem RAES

Kursus Experimentele Muziek: Boekdeel 1: Algoritmische Kompositie

Hogeschool Gent : Departement Muziek & Drama


<Terug naar inhoudstafel kursus>

<Voorbeeld programma>

 

1042:

Wiskunde in Basic

 

De grondslagen van de wiskunde - meer in het bijzonder en in volgorde van komplexiteit, van rekenkunde, alfgebra , goniometrie en van integraal en differentiaal-rekening ondergaan in hun implementering in een programmeertaal geen fundamentele wijzigingen. Wel gelden er een aantal beperkingen die een zuiver gevolg zijn van enerzijds het binaire karakter, anderzijds van de eindigheid eigen aan de machine.

Binnen BASIC kent de komputer volgende rekenkundige getaltypes met de volgende beperkingen:

 

1.-SIGNED INTEGERS: Gehele getallen: (aangeduid met de suffix %, of gedeklareerd als DEFINT)

Deze dienen volledig te worden beschreven in 2 bytes (= 16 bitposities). Er kunnen dus niet meer dan &HFFFF of 65535 verschillende gehele getallen worden onderscheiden. Basic maakt gebruik van 2's komplement notatie, waardoor deze verzameling in twee helften uiteenvalt: positieve gehele getallen en negatieve gehele getallen. Het hanteerbare bereik loopt dan ook van -32768 tot +32767.

 

2. SIGNED LONG INTEGERS: Lange gehele getallen (aangeduid met de suffix & of gedeklareerd als DEFLNG). Deze dienen volledig te worden beschreven in 4 bytes (=32 bitposities). Ook hier weer wordt de verzameling verdeeld in een positieve en een negatieve helft: van - 2.147.483.648 tot + 2.147.483.647.

 

3. SINGLE PRECISION FLOATING POINT: Getallen met enkele nauwkeurigheid en vlottende komma. Zij worden aangeduid met de suffix ! of gedeklareerd als DEFSNG. Wanneer variabelen -tegen elk disciplinair voorschrift in- niet worden gedeklareerd alvorens te worden gebruikt, dan hebben zij automatisch dit type. Hun precisie is beperkt tot 7 decimalen. Ook deze getallen worden volledig beschreven binnen het bereik van 4 bytes, die nu echter anders zijn georganiseerd! Elk getal wordt opgebouwd uit een mantisse en een exponent, waarmee het aantal nullen achter of voor de komma wordt weergegeven. Het bereik wordt hierdoor uitgebreid van -3.402823E38 tot -1.40129E-45 voor de negatieve getallen en van 1.40129E-45 tot 3.402823E38. Uiteraard kan ook het getal 0 worden uitgedrukt. Merk op dat we dus niet beschikken over het kontinuum van de rationale getallen! De afstand tussen 0 en het kleinste uitdrukbaar getal is steeds 1.40129E-45. (N.B. de notatie E gevolgd door een getal is de wetenschappelijke en technische notatie voor de exponent van het grondgetal 10. E-45 moet dus gelezen worden als 10 tot de min vijfenveertigste macht).

Voor de volledigheid wijs ik er overigens op dat de 'granulatie' mee afhangt van de gebruikte kompiler en van de bij het kompileren aangesproken funktiebibliotheek!

De interne representatie van vlottende komma getallen in Basic maakt gebruik van de IEEE-standaard. Hierbij wordt 1 bit gereserveerd voor het teken, terwijl de exponent intern gebruik maakt van het binaire stelsel: in plaats van machten van 10 worden machten van 2 gebruikt. De waarde van die exponent neemt 8 bits in beslag en de mantisse de overige 23 bits. Het ene nog niet gebruikte bit heeft de komputer nodig om uit te maken dat het om een IEEE-getal gaat.

Het is belangrijk dit steeds goed voor ogen te houden: immers bij wiskundig erg preciese berekeningen, worden andere afrondingsfouten gemaakt wanneer gebruik wordt gemaakt van het binaire stelsen, dan wanneer we dezelfde bewerking decimaal zouden uitvoeren.

 

4. DOUBLE PRECISSION FLOATING POINT: Getallen met dubbele nauwkeurigheid en vlottende komma. Zij worden aangeduid met de suffix # of via de deklaratie als DEFDBL. Voor dit getaltype gebruikt Basic 8-bytes. De mantisse van de op deze wijze uitdrukbare getallen kent 15 tot 16 nauwkeurige digits terwijl de exponenten lopen van D308 tot D-324. Om het onderscheid met de enkele nauwkeurigheidgetallen eenvoudig te maken, wordt de exponent hier aangeduid met de letter D. Het bereik wordt daardoor uitgebreid aan negatieve kant van -1.79769313486231D308 tot -4.94065D-324, via 0, en aan de positieve kant van 4.94065D324 tot 1.79769313486231D308.

Ook deze getallen worden intern zuiver binair en volgens de IEEE-standaard weergegeven en verwerkt: van de 64 bits (=8 bytes) gebruiken we 1 bit voor het teken, 11 bits voor de exponent van 2, 52 bits voor de mantisse en 1 herkenningsbit voor het IEEE-type.

 

5. CURRENCY: Dit is een getallentype dat in Basic geimplementeerd werd terwille van de hantering van financiele berekeningen. Dit type wordt aangeduid met de suffix @ of via de deklaratie als DEFCUR. Het is een getaltype met vaste komma die in de komputer behandeld worden als gehele getallen bestaande uit 8 bytes. Ze hebben 19 nauwkeurige cijfers en kennen een bereik van -922337203685477.5808 tot +922337203685477.5807.

 

Wie graag het naadje van de kous wil weten over de interne opslag en afhandeling van getallen in Basic (maar dit geldt ook voor Fortran en heel wat komputertalen) raden we aan het demonstratieprogramma FLPT.BAS in het demo subdirectory van BC7-QBX na te kijken. Ook in de uitgebreide programmers guide (p.702-725) is terzake heel wat informatie te vinden.

 

Van alle komputertalen ondersteund alleen FORTRAN ook de komplexe getallen (COMPLEX*8 en COMPLEX*16 data-type). Dit is weliswaar een handicap voor wie zich wil wagen een golfvormberekening, elektronische schakelingen en hun berekening enz..., maar toch wel te omzeilen. Immers wanneer we te maken krijgen met komplexe getallen, berekenen we systematisch het reele en het imaginaire deel afzonderlijk. De definitie i=SQR(-1) wordt immers in geen geval door de komputer aanvaard. Wie hiervan konkrete voorbeelden wil zien, moet maar eens het hoofdstukje lezen dat we opstelden over Fourier analyze.

Wanneer bij het opstarten van QBX ook de speciale wiskundige library wordt opgeladen, dan kan ook in Basic -zoals in Fortran- gebruik gemaakt worden van matrixalgebra.

 

De bewerkingen die door Basic standaard worden ondersteund zijn:

rekenkundige: +,-,*,/,\, ABS,INT,FIX

transcendentale bewerkingen:

algebraische: SQR, ^,LOG, EXP

(natuurlijke logaritmen met grondgetal e = EXP(1))

goniometrische: SIN, COS, TAN,ATN

(hoeken worden uitgedrukt in radialen, 360graden= 2*Pi rad= 8*ATN(1))

 


Filedate: 920928

Terug naar inhoudstafel kursus: <Index Kursus>

Naar homepage dr.Godfried-Willem RAES

voorbeeld