Delen door 0 in computerprogramma's

Moderators: dirkwb, Xilvo

Forumregels
(Middelbare) school-achtige vragen naar het forum "Huiswerk en Practica" a.u.b.
Zie eerst de Huiswerkbijsluiter
Gebruikersavatar
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.
Een computertaal is voor mensen, niet voor de computer.

Gebruikersavatar
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).
"Malgré moi, l'infini me tourmente." (Alfred de Musset)

Gebruikersavatar
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

Gebruikersavatar
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.
Een computertaal is voor mensen, niet voor de computer.

Gebruikersavatar
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
"Malgré moi, l'infini me tourmente." (Alfred de Musset)

Gebruikersavatar
Berichten: 5.679

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.
Sterker nog, zelfs 0.1 past al niet eens in een floating point getal :roll:
In theory, there's no difference between theory and practice. In practice, there is.

Gebruikersavatar
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 :roll:
"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.

Gebruikersavatar
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! :roll:

EDIT:

in het speciale geval 0/0 is iedere x natuurlijk goed. nou ja.. of x moet gedefinieerd zijn als 6/0 :D
“Quotation is a serviceable substitute for wit.” - Oscar Wilde

Gebruikersavatar
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

Revelation schreef:6/0 = x <=>

0*x = 6

Vind jij maar eens een kloppende x! :roll:
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.

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. :D

Gebruikersavatar
Berichten: 24.578

Re: Delen door 0 in computerprogramma's

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.
Wiskundig is er net wél een verschil.

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)

Gebruikersavatar
Berichten: 599

Re: Delen door 0 in computerprogramma's

25 punten door 0 spelers is 0 per speler want er zijn geen spelers.
Hoe kunnen er 25 punten worden gehaald door 0 spelers?

Gebruikersavatar
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
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.
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.
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.

Reageer