Article View: be.comp.programming
Article #2276Re: PL/I en de expressie zoals '25 + 1 /3' die 5.3 geeft?
From: Mark VB
Date: Thu, 05 Aug 2004 19:37
Date: Thu, 05 Aug 2004 19:37
46 lines
3208 bytes
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-mailReferences:
<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