• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

Onverklaarbaar verschil?

Status
Niet open voor verdere reacties.

robdgr

Verenigingslid
Lid geworden
8 sep 2001
Berichten
4.430
Office versie
Microsoft 365
Twee optellingen van bedragen (met dertig decimalen) geeft in beide gevallen € 1.172,260000000000000000000000000000-, dus die twee bedragen aftrekken moet op nul uitkomen, maar de werkelijke uitkomst is (ook met dertig decimalen): € 0,000000000003410605131648480000. Ik vraag me af waar dat verschil vandaan komt. Met AFRONDEN(D35-D34;2) vang ik het af, dus het probleem is opgelost, maar mijn nieuwsgierigheid wel gewekt.

Iemand een idee?

Groet,
 
Twee optellingen van bedragen (met dertig decimalen) geeft in beide gevallen € 1.172,260000000000000000000000000000-, dus die twee bedragen aftrekken moet op nul uitkomen, maar de werkelijke uitkomst is (ook met dertig decimalen): € 0,000000000003410605131648480000. Ik vraag me af waar dat verschil vandaan komt. Met AFRONDEN(D35-D34;2) vang ik het af, dus het probleem is opgelost, maar mijn nieuwsgierigheid wel gewekt.

Iemand een idee?

Groet,

Excel is niet oneindig precies, als je ver genoeg achter de comma gaat vindt je getallen die niet 0 zijn. Meer weet ik er ook niet van.
 
Ik heb deze som ook eens uitgeprobeerd in excel maar kom gewoon op 0 uit met 30 decimalen
 
Jackall,

Beide getallen zijn bij mij uitkomsten van formules, misschien heb ik daardoor het verschil en jij niet. Maar vreemd blijft het.

Groet,
 
Re Rob

beste Rob,

daar het bij jou uit een berekening komt is het verschil zoals Wigi al aangeeft een berekening verschil die de 30 decimalen overtreft.

vriendelijke groet en fijne jaarwisseling

Wim
 
Als je echt nieuwsgierig bent hoe het komt, moet je je verdiepen in floating point getallen. Computers hebben een aantal manieren van hoe zij een getal representeren. Een bekende variant hiervan is een integer, waarvan we allemaal wel eens gezien hebben hoe dat werkt.

Simpel voorbeeld

001 = 1
010 = 2
011 = 3
100 = 4
101 = 5

Nu werkt het meestal iets anders met computers, zij gaan standaard van negatieve waarde uit zodat zij evenveel negatieve getallen als positive getallen kunnen uitbeelden. (Zo heb je niet een plus of min teken nodig)

Simpel voorbeeld

001 = -3
010 = -2
011 = -1
100 = 0
101 = 1

Dit is heel leuk, maar we hebben nog steeds geen getal achter de komma neergezet. Ook dit kan je oplossen door bijvoorbeeld alle getallen die je uitbeeldt te delen door 100, maar je blijft met een probleem zitten dat je heel veel 1's en 0's nodig hebt om alle getallen in een bereik uit te beelden. De oplossing in computertermen is de floating point. Met een floating point kan je een groter bereik aan getallen uitbeelden, maar niet zo precies als integers. In andere woorden, je levert precizie in voor grotere getallen te kunnen maken. Het werkt als volgt. Dit voorbeeld gebruikt 4 bits, waarvan de eerste 2 bits aangeven welke macht van 2 gebruikt wordt, en de laatste 2 vormen zoals bij een integer een getal.

00 00 = 0
00 01 = 1
00 10 = 2
00 11 = 3
01 00 = (2 tot de macht 1 (=2) + 0) = 2
01 01 = (2 tot de macht 1 (=2) + 1) = 3
01 10 = (2 tot de macht 1 (=2) + 2) = 4
01 11 = (2 tot de macht 1 (=2) + 3) = 5
10 00 = (2 tot de macht 2 (=4) + 0) = 4
..
11 11 = (2 tot de macht 3 (=8) + 3 = 11

Nu is in dit voorbeeld de getalsverhoudingen niet echt mooi gekozen. Veel getallen overlappen elkaar, maar je kan je wel voorstellen dat je door meer bits toe te wijzen aan het eerste gedeelte dat je bereik groter wordt. Ook moet je je voor kunnen stellen dat je soms een getal niet kan maken met zo'n combinatie. In dat geval kiest de computer een getal wat hij wel kan maken dat er zo dicht mogelijk bij in de buurt ligt.

Dit is ook precies wat er bij jouw voorbeeld gebeurt. Excel kan het getal niet maken in zijn interne code en kiest een getal wat hij wel kan maken dat er zo dicht mogelijk bij in de buurt ligt.

Om meer te lezen over hoe excel met je getallen omgaat verwijs ik je naar de engelse site van microsoft: http://support.microsoft.com/kb/78113
Hierop staat dat excel 65 bits gebruikt en dat zij getallen van 1.79769313486232E308 tot 2.2250738585072E-308 zowel positief als negatief.
 
Graag gedaan. Overigens met deze wetenschap kan je ook leuke grapjes uithalen in Excel,

Geef Cel A1 de waarde 0,2
Geef Cel A2 de waarde =A1*6-1
kopieer cel A2 over de cellen A3 tot A20

0,2*6 = 1,2
1,2 - 1 = 0,2

In principe zou dus in cel A1 tot en met A20 overal 0,2 moeten staan. Waar het fout gaat kan je zien wanneer je de cel eigenschappen naar heel veel decimalen zet.

(moraal van het verhaal, blijf altijd zelf nadenken!)
 
Daar sluit ik me bij aan.

Groet,
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan