Managed hosting door True
Deze opinie is van een externe deskundige. De inhoud vertegenwoordigt dus niet noodzakelijk het gedachtegoed van de redactie.

Schrikkeljaar: schrikbeeld?

 

Het schrikkeljaar-probleem is geen probleem maar een tamelijk eenvoudige rekenregel. Microsoft heeft zich daar niets aan gelegen laten liggen en rekent het jaar 1900 tot schrikkeljaar.

Erwin Jesterhoudt behandelt in zijn artikel Paus Gregorius en het 'jaar 2000'-probleem (6juni 1997) in feite twee onderwerpen: het 'jaar 2000'-probleem en het schrikkeljaar. Voor het onderwerp 'datums en computers' is stof genoeg om een boekwerk te vullen.
Bij de bespreking van het 'jaar 2000'-probleem geeft Jesterhoudt gedetailleerd aan hoe men te werk kan gaan bij een bepaalde aanpak en wat voor kosten daarmee gemoeid zijn. Hij legt de verantwoordelijkheid voor het - eigenlijk gênante - verschijnsel bij de programmeurs. De oorzaak ligt echter dieper en vloeit voort uit de beperking van de technologie, gecombineerd met de inertie van de gehele IT-industrie. Vroeger werd bijvoorbeeld op een schrijfmachine de letter x voor het maal-teken gebruikt en de letter l voor het cijfer 1. Nog altijd beschikt het toetsenbord niet over het 'maal'-teken. Blijkbaar is de computer er voornamelijk voor tekst. Op de ponskaarten moest zuinig worden omgesprongen met de beschikbare tachtig posities. Veel computertermen herinneren nog aan deze tijden, zoals CR/LF voor Carriage Return/Line Feed, in het Nederlands 'wagen terug en nieuwe regel' of 'omhaal', nog steeds als zodanig getekend op de Enter-toets. De Tab-toets wordt in een Windows-omgeving nog altijd net zo gebruikt als vroeger op de schrijfmachine: om van kolom (venster) naar kolom (venster) te springen. Nog altijd zijn er analisten die hun scherm indelen in vierentwinitg bij tachtig kolommen.
Zo zijn er nog heel wat fossiele overblijfselen uit het schrijfmachine- en ponskaartentijdperk, maar de pound foolish penny wise-houding is nooit bijgesteld. Een serie artikelen over het 'jaar 2000'-probleem is te vinden in Communications (mei, 1997), het officiële orgaan van de ACM (Association for Computing Machinery).

Schrikkeljaar

Bij het probleem met het schrikkeljaar beschrijft Jesterhoudt eenduidig de wijze waarop sinds 1582 een jaar als schrikkeljaar wordt bepaald. Het schrikkeljaar-probleem is dus geen probleem maar een tamelijk eenvoudige rekenregel. Microsoft heeft zich daar overigens niets aan gelegen laten liggen en rekent het jaar 1900 als schrikkeljaar. Microsoft heeft dit niet zelf bedacht: het komt voort uit het vroegere spreadsheet-programma Multi Plan. Daarmee is Microsoft voor wat het schrikkeljaar betreft in het gezelschap van Lotus en IBM gekomen.
Als een automatiseerder nu, met het oog op het jaar 2000, zou kiezen voor een seriële datum-opslag en hij zou een juiste conversie doen, dan zit hij bij de genoemde spreadsheet-leveranciers fout. Zijn dag wordt gepresenteerd als de dag van gisteren! 1 Maart 1900 is in de telling van Multi Plan, die begint op 1 januari 1900, de zestigste dag in plaats van de 59ste. Dat is weliswaar al lang geleden, maar bijvoorbeeld pensioenfondsen, verzekeringsmaatschappijen of notariskantoren hebben nog altijd met die datum te maken. Er zijn nog heel wat deelnemers, klanten dus, die vóór die datum geboren zijn. Dit soort instellingen heeft al eens met een eeuwwisseling te maken gehad en wordt straks geconfronteerd met het onderscheid tussen drie eeuw-perioden: de negentiende, de twintigste en de eenentwintigste eeuw.

Computer-algoritme

Het interessantste van automatiseren is het vinden van een computer-algoritme voor de beschrijving van een probleem. Het algoritme voor de bepaling van een schrikkeljaar is:
Stap 1. Bepaal de restwaarde bij deling (modulo) van het jaar door achtereenvolgens 4, 100 en 400;
Stap 2. Vergelijk de uitkomsten met 0 (zijn ze deelbaar?);
Stap 3. Tel de drie (boolean) uitkomsten op;
Stap 4. Bepaal van deze som de modulo 2, identiek aan even of oneven.
De uitkomst ligt tevens in het domein 'waar of niet waar' en geeft in dit geval aan of het om een schrikkeljaar gaat of niet.
In de computertaal J [1](een APL-dialect, niet te verwarren met Microsofts J++) vervult het Ascii-teken '|' de functie van restwaarde. J is array-georiënteerd; men kan bijvoorbeeld schrijven:
4 100 400 | 1996 met als uitkomst: 0 96 396.
Een '/' achter de '|' zorgt ervoor dat de operatie over alle elementen van het rechterargument wordt uitgevoerd. We schrijven nu:
4 100 400 |/ 1900 1996 1997 2000
 
en krijgen daarmee de matrix:

0010
096970
3003963970

 
vergelijking met 0 geeft:

1101
1001
0001

 
optelling over de kolommen door +/

2103

 
en tenslotte modulo 2 met 2|

0101

 
waaruit resulteert dat uit de beschouwde reeks alleen 1996 en 2000 schrikkeljaren zijn.

Volgende tijdbom

In één regel het beschrijvende èn op de computer uitvoerbare alogritme:
2|+/0=4 100 400|/ arg
(De executie verloopt van rechts naar links; de interpreter zorgt voor een juiste binding tussen functie en argument)
Voor arg kan elke numerieke array worden ingevuld.
Desgewenst geeft:
365+2|+/0=4 100 400|/ arg: het totaal aantal dagen in de in arg voorkomende jaren in die jaren;
28+2|+/0=4 100 400|/ arg : het aantal dagen in februari in die jaren;
(2|+/0=4 100 400|/ arg) # arg : de uit arg geselecteerde schrikkeljaren
( # selecteert uit de reeks die elementen waarvoor de conditie waar is).
De volgende tijdbom tikt reeds [2]. Op een 32-bits-woord computer waar de secondentelling begon op 1 januari 1970 (zoals bij Unix), tikt deze klok in 2035 voor het laatst; dan is het woord 'vol'.
 
Jan Karman, Almere
karman@knoware.nl
[1]. K.E. Iverson, Hui, R.: J Introduction and Dictionary
[2]. R.L. Glass: The next date crisis, ACM Communications, jan. 1997

Dit artikel is afkomstig van Computable.nl (https://www.computable.nl/artikel/1348174). © Jaarbeurs IT Media.

?


Lees meer over


Partnerinformatie
 
Vacatures

Stuur door

Stuur dit artikel door

Je naam ontbreekt
Je e-mailadres ontbreekt
De naam van de ontvanger ontbreekt
Het e-mailadres van de ontvanger ontbreekt

×
×