anoniem Geplaatst: 18 september 2004 Delen Geplaatst: 18 september 2004 Ik heb voor school een rekenmachine gemaakt, de variabele waarmee wordt gerekend is gedeclareerd als 'Extended'. Nu levert het sommetje (1/3)*3=.99999999999. Is hier wat aan te doen? Quote Link naar reactie
anoniem Geplaatst: 18 september 2004 Auteur Delen Geplaatst: 18 september 2004 uhm, vertel eens welke taal je gebruikt. [EDIT]Je wilt dus je getal afronden?[/EDIT] Quote Link naar reactie
anoniem Geplaatst: 18 september 2004 Auteur Delen Geplaatst: 18 september 2004 Declareren als "real" kan misschien beter? Quote Link naar reactie
anoniem Geplaatst: 18 september 2004 Auteur Delen Geplaatst: 18 september 2004 Delphi, ik wil niet afronden; maar één derde keer drie is 1, geen 0.999999999 Met Real Gebeurt hetzelfde. Extended Kan overigens groter worden, dus, dacht ik, precieser. Quote Link naar reactie
anoniem Geplaatst: 18 september 2004 Auteur Delen Geplaatst: 18 september 2004 Het probleem is heel simpel... Je kunt in Delphi een waarde als 1/3 nooit, maar dan ook nooit, opslaan in de standaard datatypes van de meeste programmeertalen. Kortom, er treedt een afrondings-fout op. En daar is dus niets aan te doen. Dit probleem heb je ook met zo'n beetje iedere echte rekenmachine. De enige oplossing hiervoor is door de gehele berekening in het geheugen bij te houden en kijken of je dingen kunt vereenvoudigen. Maar dat maakt het geheel wel een stuk complexer. Quote Link naar reactie
anoniem Geplaatst: 19 september 2004 Auteur Delen Geplaatst: 19 september 2004 Een rekenmachine doet dit ook ongeveer zo, maar doet stiekem iets waardoor je dat niet ziet. Hij onthoudt wel altijd zijn interne representatie (dit dus in gevallen als 1/3 iets afwijkt) maar rondt bij het weergeven af op bijv. 10 cijfers achter de komma. Dan krijg je dus 1. Als jij ook zoiets doet zal het een tijd goed gaan (als je heel lang blijft doorrekenen met dit soort getallen zal de afwijking toch echt een keer echt zichtbaar worden). Quote Link naar reactie
anoniem Geplaatst: 19 september 2004 Auteur Delen Geplaatst: 19 september 2004 [quote:0d1ae14a7b="Workshop Alex"]Je kunt in Delphi een waarde als 1/3 nooit, maar dan ook nooit, opslaan in de standaard datatypes van de meeste programmeertalen.[/quote:0d1ae14a7b]Is ook logisch; één derde komt nooit overeen met 0.333, hoeveel driëen je ook gebruikt. Quote Link naar reactie
anoniem Geplaatst: 19 september 2004 Auteur Delen Geplaatst: 19 september 2004 Afronden met [i:6c1941a7b8]Round[/i:6c1941a7b8] en met [i:6c1941a7b8]FloatToStrF[/i:6c1941a7b8] (Ook maar gelezen) leveren beiden dit op: één derde × 3 = 0.999 .999999 × 1 = 1 Quote Link naar reactie
anoniem Geplaatst: 21 september 2004 Auteur Delen Geplaatst: 21 september 2004 [quote:f47dacb811="Workshop Alex"]....en kijken of je dingen kunt vereenvoudigen. Maar dat maakt het geheel wel een stuk complexer.[/quote:f47dacb811] Leuke paradox :D Quote Link naar reactie
Aanbevolen berichten
Om een reactie te plaatsen, moet je eerst inloggen