Delen door 0 in computerprogramma's
Forumregels
(Middelbare) school-achtige vragen naar het forum "Huiswerk en Practica" a.u.b.
Zie eerst de Huiswerkbijsluiter
(Middelbare) school-achtige vragen naar het forum "Huiswerk en Practica" a.u.b.
Zie eerst de Huiswerkbijsluiter
- Berichten: 691
Delen door 0 in computerprogramma's
Edit TD: dit ging niet over de wiskundige substiliteit 0/0, maar over delingen door 0 in computerprogramma's. De ontstane discussie heb ik daarom afgesplitst.
In computerprogrammas kom je wel eens het probleem tegen:
100 punten door 2 spelers is 50 per speler
50 punten door 1 speler is 50 per speler
25 punten door 0 spelers is 0 per speler want er zijn geen spelers.
dus 25/0 geeft 0.
Als functie-resultaat geef ik altijd 0 bij een deling door 0.
(geen foutmelding verwerking)
In een computerspel kan men niet tegen de gebruiker zeggen dat er een deling door nul heeft plaatsgevonden tijdens een schietspel ofzo.
Gemiddelde score bij 0 keer schieten is 0 per kogel.
In computerprogrammas kom je wel eens het probleem tegen:
100 punten door 2 spelers is 50 per speler
50 punten door 1 speler is 50 per speler
25 punten door 0 spelers is 0 per speler want er zijn geen spelers.
dus 25/0 geeft 0.
Als functie-resultaat geef ik altijd 0 bij een deling door 0.
(geen foutmelding verwerking)
In een computerspel kan men niet tegen de gebruiker zeggen dat er een deling door nul heeft plaatsgevonden tijdens een schietspel ofzo.
Gemiddelde score bij 0 keer schieten is 0 per kogel.
Een computertaal is voor mensen, niet voor de computer.
- Berichten: 24.578
Re: Delen door 0 in computerprogramma's
Dat zal er dan toch apart geprogrammeerd zijn, want als je met de standaard wiskundige tools een deling door 0 uitvoert (zoals 25/0) krijg je geen 0 hoor.
Wellicht moet er dan iets in de aard zijn van: "if #spelers = 0, then 0 points, else *normale berekening*" (in jouw voorbeeld).
Wellicht moet er dan iets in de aard zijn van: "if #spelers = 0, then 0 points, else *normale berekening*" (in jouw voorbeeld).
"Malgré moi, l'infini me tourmente." (Alfred de Musset)
- Berichten: 2.364
Re: Delen door 0 in computerprogramma's
Je krijgt zelfs een error als je deelt door nul: 'Floating point division by zero'.
Quotation is a serviceable substitute for wit. - Oscar Wilde
- Berichten: 691
Re: Delen door 0 in computerprogramma's
Bij ingewikkelde formulen moet je ten alle tijde een error opvang systeem hebben voor overflow en delingen door nul.
Omdat computers digitaal werken vallen in bepaalde berekeningen >0 weg tot 0.
Vooral bij integer div integer calculaties.
Want wat is 1/3 bij een integercalculatie.
0 dus.
En 100[float]/ (1[integer] div 3[integer]) is dan error.
In de wiskunde is het gewoon 300.
Maar normale getallen in computers hebben geen oneindige getalbereiken.
Bij games e.d. gebruiken ze allemaal integer getallen voor de snelheid.
Het is daarom aan de programmeur om een zo goed mogelijk logische methode voor een calculatie te vinden c.q. schrijven die stabiel en snel werkt.
Omdat computers digitaal werken vallen in bepaalde berekeningen >0 weg tot 0.
Vooral bij integer div integer calculaties.
Want wat is 1/3 bij een integercalculatie.
0 dus.
En 100[float]/ (1[integer] div 3[integer]) is dan error.
In de wiskunde is het gewoon 300.
Maar normale getallen in computers hebben geen oneindige getalbereiken.
Bij games e.d. gebruiken ze allemaal integer getallen voor de snelheid.
Het is daarom aan de programmeur om een zo goed mogelijk logische methode voor een calculatie te vinden c.q. schrijven die stabiel en snel werkt.
Een computertaal is voor mensen, niet voor de computer.
- Berichten: 24.578
Re: Delen door 0 in computerprogramma's
Zulke problemen heb je in computers altijd. Zelfs wanneer je met een floating point voorstelling werkt kun je reële getallen niet exact weergeven als ze teveel decimalen bevatten. Problemen ivm nauwkeurigheid duiken dan ook op wanneer je bijvoorbeeld twee getallen die ongeveer aan elkaar gelijk zijn van elkaar wil aftrekken.
Noot: topic afgesplitst, zie edit in eerste post
Noot: topic afgesplitst, zie edit in eerste post
"Malgré moi, l'infini me tourmente." (Alfred de Musset)
- Berichten: 5.679
Re: Delen door 0 in computerprogramma's
Sterker nog, zelfs 0.1 past al niet eens in een floating point getalZulke problemen heb je in computers altijd. Zelfs wanneer je met een floating point voorstelling werkt kun je reële getallen niet exact weergeven als ze teveel decimalen bevatten.
In theory, there's no difference between theory and practice. In practice, there is.
- Berichten: 24.578
Re: Delen door 0 in computerprogramma's
Ja, je hebt zo van die 'speciale gevalletjes'.
Je zou bijna gaan denken dat computers dom zijn
Je zou bijna gaan denken dat computers dom zijn
"Malgré moi, l'infini me tourmente." (Alfred de Musset)
-
- Berichten: 249
Re: Delen door 0 in computerprogramma's
6 / 6 = 1
6 / 3 = 2
6 / 2 = 3
6 / 1 = 6
6 / 0 = oneindig
Men geeft aan dat er een fout ontstaan, toch vind ik dat op zo'n moment niet op zijn plaats.
Je hebt gewoon, imo, een oneindige herhaling zonder formele programmeer structuur.
Dat is dus bekeken van uit de hogere taal zelf.
6 / 3 = 2
6 / 2 = 3
6 / 1 = 6
6 / 0 = oneindig
Men geeft aan dat er een fout ontstaan, toch vind ik dat op zo'n moment niet op zijn plaats.
Je hebt gewoon, imo, een oneindige herhaling zonder formele programmeer structuur.
Dat is dus bekeken van uit de hogere taal zelf.
- Berichten: 2.364
Re: Delen door 0 in computerprogramma's
Tuurlijk ontstaat er een fout. De PC controleert alvorens hij gaat rekenen of er een deling door 0 wordt gedaan, doet hij dat niet gaat het al helemaal fout. Want welk getal keer 0 is 6?
6/0 = x <=>
0*x = 6
Vind jij maar eens een kloppende x!
EDIT:
in het speciale geval 0/0 is iedere x natuurlijk goed. nou ja.. of x moet gedefinieerd zijn als 6/0
6/0 = x <=>
0*x = 6
Vind jij maar eens een kloppende x!
EDIT:
in het speciale geval 0/0 is iedere x natuurlijk goed. nou ja.. of x moet gedefinieerd zijn als 6/0
Quotation is a serviceable substitute for wit. - Oscar Wilde
- Lorentziaan
- Berichten: 1.433
Re: Delen door 0 in computerprogramma's
Het decimale getal 0.1 is niet exact te schrijven in binaire notatie, toch? Je zou een oneindige expansie krijgen in de vorm van 0.000111etc. Dat neemt niet weg dat het in floating point notatie prima geschreven kan worden als 1E-1. Zowel de mantisse als de exponent zijn dan gehele getallen, en de representatie is exact. Het wordt pas vervelend wanneer de mantisse (of de exponent, maar dat gebeurt minder snel denk ik) niet meer in het aangewezen aantal bits past dat bij een floating-point getal hoort.
-
- Berichten: 249
Re: Delen door 0 in computerprogramma's
Maar nu zeg je er is een som en die heeft een uitkomst. Daarbij ga je voorbij aan het feit dat die uitkomst op een bepaalde manier gevonden moet worden.Revelation schreef:6/0 = x <=>
0*x = 6
Vind jij maar eens een kloppende x!
Bijvoorbeeld:
6 / 3 = x, om de uitkomst te bepalen moet je gaan kijken hoeveel keer 3 in 6 gaat.
6 / 0 = x misschien onzinnig, maar qua essentie is er niet mis mee er kan dus ook geen fout ontstaan omdat de som qua structuur niet afwijkt en kan er op dezelfde manier naar de uitkomst gezocht worden.
Aangezien dat oneindig is wordt er, al dan niet terecht, een foutmelding gegeven omdat je met zo'n situatie toch niets mee opschiet, althans ik heb er zelf niet iets zinnigs voor gevonden.
- Berichten: 24.578
Re: Delen door 0 in computerprogramma's
Wiskundig is er net wél een verschil.6 / 0 = x misschien onzinnig, maar qua essentie is er niet mis mee er kan dus ook geen fout ontstaan omdat de som qua structuur niet afwijkt en kan er op dezelfde manier naar de uitkomst gezocht worden.
Voor de reële getallen is de deling a/b enkel gedefinieerd voor b verschillend van 0.
Het geval van 6/0 verschilt wiskundig dus wel degelijk van 6/x met x niet 0.
In de IEEE floating-point standaard wordt a/0 gelijkgesteld aan +oneindig voor a positief, en -oneindig voor a negatief.
Dit voorkomt dat je verplicht bent het als een apart geval te beschouwen, maar is dus wiskundig niet helemaal netjes.
"Malgré moi, l'infini me tourmente." (Alfred de Musset)
- Berichten: 599
Re: Delen door 0 in computerprogramma's
Hoe kunnen er 25 punten worden gehaald door 0 spelers?25 punten door 0 spelers is 0 per speler want er zijn geen spelers.
- Berichten: 691
Re: Delen door 0 in computerprogramma's
Een spelletje X heeft 40 punten te verdelen.
Iedere speler die wint bekomt punten uit die pot.
Bij 4 spelers is dat 10 punten
Bij 3 spelers is dat 13 punten.
Bij 2 spelers is dat 20 punten.
Bij 1 speler, joepie alles gewonnen, 40 punten.
Bij 0 spelers, niemand haalde het doel van het spel, is het 0.
========================================
Bij computerspelen e.d. ga ik er ook vanuit dat 0/0 0 is.
Ook (6/0)/(3/0)=0
(6/0)+1=1
Iedere speler die wint bekomt punten uit die pot.
Bij 4 spelers is dat 10 punten
Bij 3 spelers is dat 13 punten.
Bij 2 spelers is dat 20 punten.
Bij 1 speler, joepie alles gewonnen, 40 punten.
Bij 0 spelers, niemand haalde het doel van het spel, is het 0.
========================================
Bij computerspelen e.d. ga ik er ook vanuit dat 0/0 0 is.
Ook (6/0)/(3/0)=0
(6/0)+1=1
Een computertaal is voor mensen, niet voor de computer.
-
- Berichten: 7.068
Re: Delen door 0 in computerprogramma's
Mij ontgaat een beetje wat het doel is van deze thread, dus mijn volgende opmerking is misschien misplaatst.
Dit is logisch niet correct. Je kunt 40 punten niet verdelen over 0 spelers. Je kan natuurlijk wel je programma zo inrichten dat het bij delen door nul een bepaald getal produceert. Dit is enkel uit gemakszucht natuurlijk, want je kan net zo goed een routine schrijven die even controleert of er door nul gedeeld gaat worden.Schwartz schreef:Een spelletje X heeft 40 punten te verdelen.
Iedere speler die wint bekomt punten uit die pot.
Bij 4 spelers is dat 10 punten
Bij 3 spelers is dat 13 punten.
Bij 2 spelers is dat 20 punten.
Bij 1 speler, joepie alles gewonnen, 40 punten.
Bij 0 spelers, niemand haalde het doel van het spel, is het 0.