Hoe precies is een if/else vergelijking?

Moderator: Moderators

Plaats reactie
Gebruikersavatar
Sven
Berichten: 6016
Lid geworden op: 24 sep 2008 09:13
Locatie: Arnhem
Contacteer:

Hoe precies is een if/else vergelijking?

Bericht door Sven »

Ik heb wat code geschreven waarbij variabelen ingesteld worden na het berekenen of een rechthoek langer dan 2 vierkantjes is of korter.

De maat van de rechthoek volgt uit andere berekeningen.

De kans dat de rechthoek precies 4 vierkanten groot uitpakt is klein maar niet nul.

Wat doet een systeem in het geval dat zo'n vergelijking een rechthoek geeft die "precies" 2 vierkantjes is? (En daar niet in is voorzien?)
Doet ie dat op de 5 cijfers achter de komma en lukt dat praktisch niet of slaat het systeem vast omdat het er niet uitkomt?
350 kilo 1250x1250 aluminium portaalfrees:
http://cnczone.nl/viewtopic.php?f=8&t=13039
Beginnen met CNC? Ontwerpen, bouwen, of toch kopen?
http://cnczone.nl/viewtopic.php?f=8&t=15481
Gebruikersavatar
DaBit
Donateur
Berichten: 11041
Lid geworden op: 05 dec 2012 13:48
Locatie: Oss

Re: Hoe precies is een if/else vergelijking?

Bericht door DaBit »

Als computers met drijvende-komma getallen 100x een cent optellen is het resultaat geen hele euro.

De juiste manier is dus de tolerantie zelf verwerken. Dus 'als de rechthoek tenminste 0,01mm groter is dan de vierkanten word het een rechthoek en anders niet' of iets van die strekking.

Maar ik zie verder niet gauw problemen? 5 cijfers achter de komma haal je overigens wel
De belangrijkste wet in de wetenschap: 'hoe minder efficient en hoe meer herrie, hoe leuker het is'
Tolp2
Donateur
Berichten: 476
Lid geworden op: 28 nov 2015 10:06
Locatie: Rotterdam
Contacteer:

Re: Hoe precies is een if/else vergelijking?

Bericht door Tolp2 »

DaBit schreef: 14 dec 2023 20:03 Als computers met drijvende-komma getallen 100x een cent optellen is het resultaat geen hele euro.
Dit is dus de reden waarom er ook 'fixed point' bestaat, juist vanwege de financiële wereld. Dan blijven de optellingen wel kloppen. Het klopt trouwens dat 0.01 niet te schrijven is in binair. Maar het probleem wordt alleen maar groter bij grotere getallen, omdat dan de nauwkeurigheid achteruit holt.
Sven schreef: 14 dec 2023 19:46 Ik heb wat code geschreven waarbij variabelen ingesteld worden na het berekenen of een rechthoek langer dan 2 vierkantjes is of korter.

De maat van de rechthoek volgt uit andere berekeningen.

De kans dat de rechthoek precies 4 vierkanten groot uitpakt is klein maar niet nul.

Wat doet een systeem in het geval dat zo'n vergelijking een rechthoek geeft die "precies" 2 vierkantjes is? (En daar niet in is voorzien?)
Doet ie dat op de 5 cijfers achter de komma en lukt dat praktisch niet of slaat het systeem vast omdat het er niet uitkomt?


Dit hangt er van af hoe je het else-if-statement hebt ontworpen, bijvoorbeeld:

Code: Selecteer alles

if (hoogte < 2*lengte): 
   <doe wat>
else:
   <doe wat anders>
In het geval dat de hoogte precies gelijk is aan twee keer de lengte, dan is de de statement (hoogte < 2*lengte) niet waar zijn, en dus wordt de else-clausule uitgevoerd.

Of dit ook het gewenste gedrag is, dat hangt er vanaf wat je ontwerp is.
Assumptions are the mother of all $%^& ups.
Twee keer meten is zeker weten, als je weet wat je meet...
Gebruikersavatar
Sven
Berichten: 6016
Lid geworden op: 24 sep 2008 09:13
Locatie: Arnhem
Contacteer:

Re: Hoe precies is een if/else vergelijking?

Bericht door Sven »

Verhip, je hebt gelijk!

Ik dacht ingewikkelder dan nodig....
350 kilo 1250x1250 aluminium portaalfrees:
http://cnczone.nl/viewtopic.php?f=8&t=13039
Beginnen met CNC? Ontwerpen, bouwen, of toch kopen?
http://cnczone.nl/viewtopic.php?f=8&t=15481
Gebruikersavatar
DaBit
Donateur
Berichten: 11041
Lid geworden op: 05 dec 2012 13:48
Locatie: Oss

Re: Hoe precies is een if/else vergelijking?

Bericht door DaBit »

Tolp2 schreef: 14 dec 2023 20:58 Dit is dus de reden waarom er ook 'fixed point' bestaat, juist vanwege de financiële wereld. Dan blijven de optellingen wel kloppen. Het klopt trouwens dat 0.01 niet te schrijven is in binair.
Het voorbeeld was dan ook niet willekeurig gekozen :mrgreen:

Maar aangezien LinuxCNC ook gewoon floating point gebruikt zijn afrondingen aan de orde van de dag.

(Ooit in CAD of waar dan ook een dimensie van, zeg, 4mm ingevoerd om er naderhand bij een aanpassing achter te komen dat het 3,9999999998mm geworden is? Dat dus.
Of wat Altium doet: je spoortje is 0,1499999mm breed, dat is minder dan 0,15mm en dus fout. Argl.)

Dat wil niet zeggen dat je daar dan ook last van hebt. Met zoiets 'onnauwkeurigs' als frezen niet gauw.
De belangrijkste wet in de wetenschap: 'hoe minder efficient en hoe meer herrie, hoe leuker het is'
MeMoRy
Berichten: 737
Lid geworden op: 17 okt 2022 09:40
Locatie: Utrecht

Re: Hoe precies is een if/else vergelijking?

Bericht door MeMoRy »

Floating point op de computer is bijna een specialisme opzich. Er zijn hele boeken over geschreven en mensen op gepromoveerd.

Zo zijn er allemaal quirks, zoals dat je als je meerdere getallen bij elkaar wil optellen je ze eerst van klein naar groot moet sorteren. Want een heel klein getal bij een groot getal optellen het soms geen effect.

En dan heb je nog dingen als min nul, plus/min oneindig, gedenormaliseerde getallen en meerdere soorten Not-A-Number...
Tolp2 schreef: 14 dec 2023 20:58 Dit is dus de reden waarom er ook 'fixed point' bestaat, juist vanwege de financiële wereld. Dan blijven de optellingen wel kloppen.
Niet helemaal, want fixed-point was er al ruim voordat de financiële wereld gebruik maakte van computers. Fixed point is een stuk simpeler te implementeren, sneller en goedkoper.
Bij fixed-point gaat optellen en aftrekken wel goed, maar vermenigvuldigen en delen is weer hetzelfde probleem met afrondingsfouten. En er zijn vroeg of laat altijd situaties waarbij je uit het kleinere bereik loopt.
Gebruikersavatar
Arie Kabaalstra
Donateur
Berichten: 13539
Lid geworden op: 07 feb 2007 18:37
Locatie: Bakhuuz'n
Contacteer:

Re: Hoe precies is een if/else vergelijking?

Bericht door Arie Kabaalstra »

Tolp2 schreef: 14 dec 2023 20:58 Dit hangt er van af hoe je het else-if-statement hebt ontworpen, bijvoorbeeld:
CODE: SELECTEER ALLES

if (hoogte < 2*lengte):
<doe wat>
else:
<doe wat anders>
In het geval dat de hoogte precies gelijk is aan twee keer de lengte, dan is de de statement (hoogte < 2*lengte) niet waar zijn, en dus wordt de else-clausule uitgevoerd.

Of dit ook het gewenste gedrag is, dat hangt er vanaf wat je ontwerp is.
Precies die methode is iets wat ik ook zou toepassen..
't is belangrijk dat je je voorwaarden exact opstelt, dus inderdaad kijken is A< 2B?.. dat is je voorwaarde.. niet meer en niet minder.. als A=8 en B=4.000000001m dan is A<2B waar, immers; 4.000000001=8.000000002
MeMoRy
Berichten: 737
Lid geworden op: 17 okt 2022 09:40
Locatie: Utrecht

Re: Hoe precies is een if/else vergelijking?

Bericht door MeMoRy »

Maar dat houdt een keertje op
e.g.: 2*4.0000000000000001 == 8
Plaats reactie