Op deze website gebruiken we cookies om content en advertenties te personaliseren, om functies voor social media te bieden en om ons websiteverkeer te analyseren. Ook delen we informatie over uw gebruik van onze site met onze partners voor social media, adverteren en analyse. Deze partners kunnen deze gegevens combineren met andere informatie die u aan ze heeft verstrekt of die ze hebben verzameld op basis van uw gebruik van hun services. Meer informatie.

Akkoord

Vraag & Antwoord

Programmeren

Rekenmachine: variabele declareren.

Laurens
8 antwoorden
  • 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?
  • uhm, vertel eens welke taal je gebruikt.

    [EDIT]Je wilt dus je getal afronden?[/EDIT]
  • Declareren als "real" kan misschien beter?
  • 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.
  • 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.
  • 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: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.
  • 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

Beantwoord deze vraag

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.