🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: be.comp.programming
Article #2276

Re: PL/I en de expressie zoals '25 + 1 /3' die 5.3 geeft?

#2276
From: Mark VB
Date: Thu, 05 Aug 2004 19:37
46 lines
3208 bytes
"a|n" <me@privacy.invalid> wrote in message
news:sgvug0tnu2t5ennn2de6k55r7gfeibb9od@4ax.com...
>
> Ik bestudeer een boek Concepten van programmeertalen. In het boek zegt
> men op een bepaald moment dat in PL/I de expressie '25 + 1 / 3' daar 5.3
> geeft en niet zoals in de wiskunde verwacht wordt.
> Iemand die me dat eventueel een beetje kan uitleggen? In alle geval
> bedankt bij voorbaat.
>
> --
> mvg. Astrid

Astrid,

Zoiets kan je normaal enkel voorhebben door een onjuiste declaratie van de
variabelen, of door het gebruik van directe statements waarbij de getallen
van verschillende precisie zijn.

Gezien de structuur van PL/I, en de talloze "defaults" die de user vrij kan
aanpassen, is het vrij complex om voor bovenstaand voorbeeld uit te leggen
hoe men aan het resultaat komt, maar het komt erop neer dat -bij een
fixed-point decimal in PL/I- de waarde bewaard wordt zonder de komma, en dit
terwijl je zelf de precisie en de schaal-factor kan instellen.  Dit betekent
dus dat de waarde "1.234" intern wordt opgeslagen als "1234", en pas bij de
uitvoer van de variabele de komma toegevoegd wordt.

Wanneer je dit toepast op het voorbeeld dat je aanhaalt, zal eerst de
bewerking "1/3" uitgevoerd worden (dus m�t inachtname van de onderlinge
prioriteiten van de bewerkingen).  Het resultaat daarvan is 0.333... en
vanwege het grote aantal cijfers na de komma (of door eigen overrule) wordt
dit resultaat bewaard in een variabele waar slechts ��n positie v��r de
komma toegestaan is, en alle andere gebruikt worden voor de digits na de
komma.

Achteraf tel je er 25 bij, maar gezien voor het tussenresultaat slechts ��n
positie voor de komma gedefinieerd werd, is dit ook automatisch zo voor alle
volgende resultaten... eigenlijk tel je er dus gewoon slechts 5 bij.  De
'most significant digit', in dit geval 2 (x10^2) wordt gewoon weggelaten.

Een lange uitleg om te zeggen dat het eigenlijk om een "onvolkomenheid"
gaat, die wel in meerdere programmeertalen terug te vinden is, maar steeds
op te lossen door een correcte declaratie van de variabelen :-)


hopend u hiermede van dienst geweest te zijn,
Mark Van Borm
Technical Details
Message-ID: <90wQc.204697$Rd4.10368142@phobos.telenet-ops.be>
Path: arc1-ca.pugleaf.net!g2news1.google.com!news1.google.com!news.glorb.com!ecngs!feeder.ecngs.de!193.190.198.58.MISMATCH!aotearoa.belnet.be!news.belnet.be!ossa.telenet-ops.be!phobos.telenet-ops.be.POSTED!not-for-mail
References: <sgvug0tnu2t5ennn2de6k55r7gfeibb9od@4ax.com>

Show Full Headers
Complete Article Headers
X-Google-Thread: fcea4,923c2253d2b28f4d
X-Google-Attributes: gidfcea4,public
X-Google-Language: DUTCH,ASCII
Path: arc1-ca.pugleaf.net!g2news1.google.com!news1.google.com!news.glorb.com!ecngs!feeder.ecngs.de!193.190.198.58.MISMATCH!aotearoa.belnet.be!news.belnet.be!ossa.telenet-ops.be!phobos.telenet-ops.be.POSTED!not-for-mail
From: "Mark VB" <mark.vanborm@telenet.be>
Newsgroups: be.comp.programming
References: <sgvug0tnu2t5ennn2de6k55r7gfeibb9od@4ax.com>
Subject: Re: PL/I en de  expressie zoals '25 + 1 /3' die 5.3 geeft?
Lines: 48
X-Priority: 3
X-MSMail-Priority: Normal
X-Newsreader: Microsoft Outlook Express 5.00.2919.6700
X-MimeOLE: Produced By Microsoft MimeOLE V5.00.2919.6700
Message-ID: <90wQc.204697$Rd4.10368142@phobos.telenet-ops.be>
Date: Thu, 05 Aug 2004 19:37:41 GMT
NNTP-Posting-Host: 81.83.65.41
X-Complaints-To: abuse@telenet.be
X-Trace: phobos.telenet-ops.be 1091734661 81.83.65.41 (Thu, 05 Aug 2004 21:37:41 MEST)
NNTP-Posting-Date: Thu, 05 Aug 2004 21:37:41 MEST
Organization: Telenet Internet