Toon posts:

optel uitkomst

Pagina: 1
Acties:

Verwijderd

Topicstarter
Als ik de volgende code gebruik in javascript

code:
1
2
totaal = 0.6 + 0.6 + 0.6;
alert("totaal: " + totaal);


Dan krijg ik dit als uitkomst.

totaal = 1.799999999999998 :?

Waarom krijg ik niet 1.8 als antwoord?

Kan iemand mij helpen?

[ Voor 6% gewijzigd door Verwijderd op 31-03-2005 12:59 ]


  • Willem
  • Registratie: Februari 2001
  • Laatst online: 22:33
Cursusje rekenen met JavaScript nemen/zoeken/kopen :)

Motor onderhoud bijhouden


  • Pelle
  • Registratie: Januari 2001
  • Laatst online: 25-04 05:11

Pelle

🚴‍♂️

Mag wel weer open hoor, zo'n common probleem is dit nl niet ;)

code:
1
alert("totaal: " + (parseInt(Math.round(totaal*100)))/100);


Meestal ben je op dit soort oplossingen aangewezen.

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
[rml]RobIII in "[ PHP] rekenfout in PHP"[/rml] :Y)

Kort door de bocht: Floating point's zijn nooit 100% precies, enkel een benadering. Dat heeft te maken met de manier waarop floating points worden opgeslagen.

[ Voor 54% gewijzigd door RobIII op 31-03-2005 13:43 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • André
  • Registratie: Maart 2002
  • Laatst online: 23-04 12:47

André

Analytics dude

Of je doet gewoon dit:

code:
1
2
totaal = (.6 + .6 + .6).toFixed(2);
alert("totaal: " + totaal);

  • rapture
  • Registratie: Februari 2004
  • Laatst online: 02:11

rapture

Zelfs daar netwerken?

Verwijderd schreef op donderdag 31 maart 2005 @ 12:59:
Als ik de volgende code gebruik in javascript

code:
1
2
totaal = 0.6 + 0.6 + 0.6;
alert("totaal: " + totaal);


Dan krijg ik dit als uitkomst.

totaal = 1.799999999999998 :?

Waarom krijg ik niet 1.8 als antwoord?

Kan iemand mij helpen?
Elke decimaal getal wordt omgezet tot een binair getal, lees: alles dat je met cijfers van machten van tien kan beschrijven wordt omgezet tot een macht van 2. Probeer 10 eens met machten van 2 te benaderen. Als je wortel van 10 uitrekent dat krijg je een leuk kommagetal, maar men kan deze kommagetal nooit exact bereiken. 2^(2+1) = 8 ; 2^(2+1+1/4) = 9,51... ; 2^(2+1+1/4+1/16) = 9,935... ; 2^(2+1+1/4+1/16+1/128) = 9,9888... enz probeert men te benaderen.

Met deze benaderingsfouten verderrekenen en blijven rekenen heeft ervoor gezocht dat de Amerikaanse Patriot-luchtafweer ernaast hebben geschoten tijdens de Golfoorlog, met doden als gevolg. nieuws: Onderzoekers Sun vinden computers slecht rekenen De oplossing voor die luchtafweer is eenvoudig, gewoon regelmatig de reset-knop induwen en het rekent weer met een schone lei.

[ Voor 10% gewijzigd door rapture op 31-03-2005 13:56 ]


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
rapture schreef op donderdag 31 maart 2005 @ 13:51:
De oplossing voor die luchtafweer is eenvoudig, gewoon regelmatig de reset-knop induwen en het rekent weer met een schone lei.
Dan heb je het denk ik niet helemaal begrepen ;)
Die dingen moeten rekenen met resultaten uit vorige berekeningen waarin die "afrondingsfouten" zijn opgenomen. Je blijft altijd wel houden dat je dus fout op fout op fout krijgt, tenzij je correcties gaat gebruiken in je algoritmes.
...Oneindige getallen kunnen binnen een computer niet precies gerepresenteerd worden, er zal op een bepaald aantal cijfers achter de komma moeten worden afgerond. De onnauwkeurigheid wordt meegenomen in volgende berekeningen en zal daardoor steeds groter worden. In het geval van de Patriots zat de fout in de berekening van de tijd. Door afrondingen tijdens de calculaties kreeg de berekende tijd per uur een afwijking van 0,0034 seconden. Toen de Scuds afgeweerd moesten worden, was het systeem al honderd uur operationeel en was er inmiddels een afwijking van een derde seconde. De Patriots misten hierdoor de Scud-raket.

[ Voor 46% gewijzigd door RobIII op 31-03-2005 14:06 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Verwijderd

Topicstarter
dank jullie wel. :)
Pagina: 1