rekenkundige bewerkingen met floats

Pagina: 1
Acties:
  • 433 views

Onderwerpen

Vraag


Acties:
  • 0 Henk 'm!

  • Spiekes
  • Registratie: Juni 2020
  • Laatst online: 08-07-2020
Python 3.8.2 (tags/v3.8.2:7b3ab59, Feb 25 2020, 22:45:29) [MSC v.1916 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license()" for more information.
>>> 1.1+1.2==2.3
True
>>> 1.1+1.3==2.4
False
>>>

Is er een verklaring voor bovenstaande?

Alle reacties


Acties:
  • 0 Henk 'm!

  • jeroen3
  • Registratie: Mei 2010
  • Laatst online: 22:07
Een == op floats is nooit toegestaan. Je moet altijd een range compare doen.
De methode waarop IEE 754 werkt maakt == onmogelijk.

Dat komt omdat 1.1 helemaal niet uit te drukken is in 32 bit floats. Dat slaat hij op als: 1.10000002384185791015625.
Tevens 1.2 dat is:
1.2000000476837158203125
En 2.3 is 2.2999999523162841796875.
Die berekening gaat dus nat.
Want 1.10000002384185791015625 + 1.2000000476837158203125 = 2.30000007153, en dat is geen 2.3 :P

Test het zelf.

De enige uitzondering voor == op floats is om te kijken of ze nog NULL zijn. Maar dat heb je heel weinig nodig. Zeker in python is dat uitzonderlijk.

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Lees onze FAQ Floats (ook wel drijvende komma of zwevende komma getallen) eens. Verder: Die vragen die er staan wanneer je een nieuw topic opent staan er niet voor niets:
Mijn vraag
...

Relevante software en hardware die ik gebruik
...

Wat ik al gevonden of geprobeerd heb
...
En tot slot verwijs ik je dan ook nog even naar onze Quickstart. We stellen 't namelijk wel op prijs als je een beetje de moeite neemt om een fatsoenlijke topicstart te schrijven (en alles wat daarbij hoort - zie, nogmaals, voorgenoemde quickstart) i.p.v. je probleem te copy/pasten / dumpen en "Is er een verklaring voor bovenstaande?" erbij te typen.
jeroen3 schreef op zondag 14 juni 2020 @ 00:00:
Een == op floats is nooit toegestaan.
Onzin, dat is prima toegestaan, maar 't doet misschien niet altijd wat je zou verwachten als je niet weet hoe floats werken.

[ Voor 32% gewijzigd door RobIII op 14-06-2020 00:04 ]

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


Dit topic is gesloten.