eller
my som ofta användes i samband
med numerisk analys av datorberäkningar. Denna konstant kan enklast uppfattas som det halva
avståndet mellan 1 och nästa flyttal. Det ger en begränsning av det relativa
fel med vilka godtyckliga tal kan lagras som flyttal, om korrekt avrundning sker. Professor William
Kahan har angett en listig metod att räkna ut detta värde. Denna metod fungerar på
alla datorer som ej har basen tre (eller en multipel av tre).
PROGRAM EPSILON
IMPLICIT NONE
REAL :: A, B, C, D, E
A = 1.0/3.0
B = 4.0*A - 1.0
C = 3.0*B - 1.0
D = 0.5*C
E = ABS(D)
WRITE(*,*) ' my = ', E
END PROGRAM EPSILON
Programmet är som synes skrivet med stora bokstäver (VERSALER), vilket är det
vanligaste vid Fortran, men det går numera oftast lika bra att använda små bokstäver
(gemena). Processorn gör ingen skillnad mellan små och stora bokstäver, utom
vid in- och utmatning.
Första raden ger namnet på programmet, den andra är en mycket bra sats som kommer att diskuteras senare. I den tredje raden talar vi om för systemet att de fem namnen A, B, C, D och E svarar mot flyttal.
Notera att en tredjedel måste skrivas som 1.0/3.0, för att tala om för systemet att det är fråga om flyttal och inte om heltal. De fyra räknesätten anges med + - * respektive /. Notera att i matematik användes ofta en punkt, ett kryss, eller ingenting för att markera multiplikation, som 2·3, a×b, eller 5c, men i Fortran måste asterisken * användas för att markera multiplikation. Tilldelning sker med ett likhetstecken =, varvid storheten till vänster får värdet av det till höger, något kolon lika med som i Algol eller Pascal finns inte. Radslut behöver normalt inte markeras.
Eftersom storheten D kan bli negativ tar vi bort tecknet med hjälp av den inbyggda funktionen ABS.
Utmatningen sker med WRITE-satsen, här utnyttjande standardenheten för utmatning och standardformatet att skriva ut (markerat med de båda asteriskerna). Texten inom apostroferna skrivs ut, följt av värdet på storheten E. Resultatet blir på ett vanligt system (Sun, DEC station, IBM PC eller VAX/VMS)
my = 5.9604645E-08
och på ett ovanligt system (nämligen Cray)
my = 7.105427357601E-15
Den sista raden med END talar om för systemet att programmet slutar där.
Programmet skall nu kompileras, länkas och köras. Detta sker i två steg, först kompilering och länkning med kommandot
f90 epsilon.f90
och sedan körning med
a.out
Resultatet finns ovan. Notera att UNIX skiljer på kommandon och filnamn givna med små
eller stora bokstäver. Vid användning av Cray (och andra maskiner där PATH inte
är satt på normalt sätt) bör aktuell filkatalog anges, varför körning
sker med
./a.out
Programmet skall nu kompileras, länkas och köras. Detta sker i tre steg, först kompilering med kommandot
for epsilon
och länkning med
lin epsilon
och sedan körning med
run epsilon
Ovanstående använder Fortran 77 och förutsätter att
programmet finns på
filen EPSILON.FOR. Programmet måste då ha justerats till
Fortran 77. Programmet ovan
kräver då fyra mycket små justeringar, rad 2 skall tas bort,
i rad 3 skall dubbelkolon :: tas
bort, och samtliga rader skall vara inskjutna åt höger minst till
position 7. Dessutom skall PROGRAM EPSILON tas bort i den sista raden.
En version av programmet i Fortran 77 finns i filen
epsilon.f. Resultatet
med Fortran 77 blir samma som för de vanliga UNIX-maskinerna.
Jag har tyvärr ännu
inte tillgång till någon VAX med Fortran 90.
Notera att VAX/VMS ej skiljer på
kommandon och filnamn givna med små eller stora bokstäver.
Programmet skall nu kompileras, länkas och köras. Detta kan ske i ett steg vid användning av Fortran 90 från NAG. Först måste man dock ha startat ett hjälpsystem med namnet DBOS, vilket sker med kommandot DBOS (Detta hjälpsystem följer med vid köpet av kompilatorn). Därefter ger man kommandot
ftn90 epsilon /lgo
Resultatet blir det gamla vanliga. Hjälpsystemet DBOS är ej
kompatibelt med alla andra system under MS-DOS, bland annat går
det ej att starta Windows när DBOS är aktivt. Man
måste därför ibland stänga det med kommandot
KILL_DBOS. Man kan däremot starta DBOS när man kör
DOS-promptern från Windows. Notera att MS-DOS ej skiljer
på kommandon och filnamn givna med små eller stora
bokstäver.