Ik heb gisteren al even gekeken of er iets dergelijks al op de forums rond zweeft (ik kom hier niet zo vaak) maar kon er niets over vinden.
Ik ben er nu al meerdere keren tegen aan gelopen dat java vreemde dingen kan doen als je iets berekent met getal na de komma.
een voorbeeld is
Je zou verwachten dat dit als resultaat 1.0 heeft. Echter is dit niet het geval. Java komt doodleuk op 0.9999999999999999
Wanneer je de berekening om gooit naar floats (zelf pikt java doubles op deze manier) dan komt hij op 1.000001
Op zich is dit geen gigantisch issue, maar bijvoorbeeld als ik dit doe:
dan snap je al dat het een probleem gaat worden.
De waarde in a1 blijkt namelijk geen 0.3 maar 0.30000000000000004 te zijn.
Weet iemand wat de reden hier van is? en/of waarom dit zo is? Ik snap er zelf geen bal meer van waarom dit zo geimplementeerd is.
Ik liep er tegenaan omdat ik in een stuk code voor een programma continu met standaard debug waarden van 0.# aan het optellen was en vervolgens een resultaat kreeg met een hele stapel getallen na de komma
Normaal let ik er niet zo op, maar in dit geval had ik die getallen in mijn debug output opgenomen en viel het toch wel op dat je in theorie als je steeds getallen optelt met 1 getal na de komma nooit een resultaat zou kunnen krijgen met een hele stapel getallen na de komma.
Bovenstaande is wel een heel simpel voorbeeld overigen in vergelijking met wat er in mn programma gebeurt, maar het illustreert het probleem wel goed. hoewel de afwijkingen niet groot zijn kan het wel vreemde resultaten opleveren.
anyway, iemand een idee hoe en waarom? Of heb ik een simpele fout gemaakt (behalve java gebruiken natuurlijk
) Of is mn java setup gewoon om zeep? (al zo het dan wel zo moeten zijn bij alle 6 machines hier in huis waar ik het op getest heb).
OS=windows (vista (64)/XP(32))
Op de vista machine de laatste JRE/JDK, op de XP bak versies van een jaar oud ongeveer.
Ik ben er nu al meerdere keren tegen aan gelopen dat java vreemde dingen kan doen als je iets berekent met getal na de komma.
een voorbeeld is
Java:
1
2
3
4
5
6
7
8
9
| public class testnum { public static void main(String[] args) { System.out.println(0.1+0.1+0.1+0.1+0.1+0.1+0.1+0.1+0.1+0.1); } } |
Je zou verwachten dat dit als resultaat 1.0 heeft. Echter is dit niet het geval. Java komt doodleuk op 0.9999999999999999
Wanneer je de berekening om gooit naar floats (zelf pikt java doubles op deze manier) dan komt hij op 1.000001
Op zich is dit geen gigantisch issue, maar bijvoorbeeld als ik dit doe:
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| public class testnum { public static void main(String[] args) { double a1=0.1; a1=a1+0.1; a1=a1+0.1; if (a1==0.3){ System.out.println("hij doet het goed"); } else { System.out.println("de waarde in a1="+a1); } } } |
dan snap je al dat het een probleem gaat worden.
De waarde in a1 blijkt namelijk geen 0.3 maar 0.30000000000000004 te zijn.
Weet iemand wat de reden hier van is? en/of waarom dit zo is? Ik snap er zelf geen bal meer van waarom dit zo geimplementeerd is.
Ik liep er tegenaan omdat ik in een stuk code voor een programma continu met standaard debug waarden van 0.# aan het optellen was en vervolgens een resultaat kreeg met een hele stapel getallen na de komma

Normaal let ik er niet zo op, maar in dit geval had ik die getallen in mijn debug output opgenomen en viel het toch wel op dat je in theorie als je steeds getallen optelt met 1 getal na de komma nooit een resultaat zou kunnen krijgen met een hele stapel getallen na de komma.
Bovenstaande is wel een heel simpel voorbeeld overigen in vergelijking met wat er in mn programma gebeurt, maar het illustreert het probleem wel goed. hoewel de afwijkingen niet groot zijn kan het wel vreemde resultaten opleveren.
anyway, iemand een idee hoe en waarom? Of heb ik een simpele fout gemaakt (behalve java gebruiken natuurlijk
OS=windows (vista (64)/XP(32))
Op de vista machine de laatste JRE/JDK, op de XP bak versies van een jaar oud ongeveer.