Hoe precies is een if/else vergelijking?
Moderator: Moderators
Hoe precies is een if/else vergelijking?
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?
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
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
Re: Hoe precies is een if/else vergelijking?
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 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'
Re: Hoe precies is een if/else vergelijking?
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>
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...
Twee keer meten is zeker weten, als je weet wat je meet...
Re: Hoe precies is een if/else vergelijking?
Verhip, je hebt gelijk!
Ik dacht ingewikkelder dan nodig....
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
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
Re: Hoe precies is een if/else vergelijking?
Het voorbeeld was dan ook niet willekeurig gekozen
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'
Re: Hoe precies is een if/else vergelijking?
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...
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.
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...
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.
- Arie Kabaalstra
- Donateur
- Berichten: 13538
- Lid geworden op: 07 feb 2007 18:37
- Locatie: Bakhuuz'n
- Contacteer:
Re: Hoe precies is een if/else vergelijking?
Precies die methode is iets wat ik ook zou toepassen..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.
'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
Re: Hoe precies is een if/else vergelijking?
Maar dat houdt een keertje op
e.g.: 2*4.0000000000000001 == 8
e.g.: 2*4.0000000000000001 == 8