Scholieren.com forum

Scholieren.com forum (https://forum.scholieren.com/index.php)
-   Huiswerkvragen: Exacte vakken (https://forum.scholieren.com/forumdisplay.php?f=17)
-   -   Mod (https://forum.scholieren.com/showthread.php?t=57708)

^AmArU^ 16-04-2002 19:03

Mod
 
Ik wil graag wat meer info over MOD.
Ik vind het zo'n a-wiskundige functie,
kan iemand mij uitleggen hoe dat gedaan wordt?
Ik kan me voorstellen dat x mod y = z
zou opleveren
y*frac(x/y) = z

maar
hoe gebeurt dit op de computer?
ik merkte dat voor getallen als
x = 10^7
y = 10^7
en z is bijvoorbeeld 2 * 10^5
de z in 3 tiende van een seconde of sneller berekend werd
ik zag nauwelijks verschil met een eenvoudige 4 mod 2
hoe is dit mogelijk?

Tampert 16-04-2002 19:21

huh? Wat bedoel je met frac?

x mod = wordt toch berekend door

x-Int[x/y]*y?

Waarbij int dus staat voor het gehele getal voor de komma :)...

^AmArU^ 16-04-2002 19:40

Citaat:

Tampert schreef:
huh? Wat bedoel je met frac?

x mod = wordt toch berekend door

x-Int[x/y]*y?

Waarbij int dus staat voor het gehele getal voor de komma :)...

kan ook :)

ik bedoelde fpart :P
fpart=het deel ahcter de komma
bijvoorbeeld

23 mod 6=
23/6 = 3.833333
dan fpart() = 0.8333
* 6 = 5

:)

mathfreak 16-04-2002 19:45

De functie MOD wordt gebruikt om bij 2 gehele getallen (integers in de Pascal-terminologie) de rest bij een deling te bepalen. Laat x en y 2 integers zijn, dan is x MOD y voor y kleiner dan of gelijk aan nul niet uitvoerbaar. Voor y>0 is er een integer k zodat geldt: x MOD y=x-k*y<y.
De functie MOD hangt samen met de wiskundige definitie van rekenen modulo m. We noemen een geheel a congruent met een geheel getal b modulo een geheel getal m (notatie: a=b mod m) als a-b een deler van m is. a=b mod m betekent dat deling van a door m de rest b geeft. Zie voor een toepassing hiervan tevens de topic over deelbaarheidsregels van getallen.

Tampert 16-04-2002 19:45

Citaat:

^AmArU^ schreef:


kan ook :)

ik bedoelde fpart :P
fpart=het deel ahcter de komma
bijvoorbeeld

23 mod 6=
23/6 = 3.833333
dan fpart() = 0.8333
* 6 = 5

:)


jaah pcies...

maar dan is het toch logisch dat het voor grote getallen niet zoveel uitmaakt qua snelheid?

Al zal daarbij de snelheid vooral liggen in de deling...

^AmArU^ 16-04-2002 19:52

Citaat:

Tampert schreef:



jaah pcies...

maar dan is het toch logisch dat het voor grote getallen niet zoveel uitmaakt qua snelheid?

Al zal daarbij de snelheid vooral liggen in de deling...

delen kan toch wel lang duren?
3294234324 / 3248723 is niet echt makkleijk denk ik

Tampert 16-04-2002 19:59

Citaat:

^AmArU^ schreef:


delen kan toch wel lang duren?
3294234324 / 3248723 is niet echt makkleijk denk ik

je hebt het toch over de computer?

Nah als ik jouw deling time, tot op de 20e decimaal nauwkeurig kom ik op een zeer geringe CPU-tijd... en dat is met mathematica... dus het kan sneller...

^AmArU^ 16-04-2002 20:10

Citaat:

Tampert schreef:


je hebt het toch over de computer?

Nah als ik jouw deling time, tot op de 20e decimaal nauwkeurig kom ik op een zeer geringe CPU-tijd... en dat is met mathematica... dus het kan sneller...

Ja maar bijvoorbeeld iets als 1/500000 duurt best lang
iig
je merkt het verschil
maja goed
het duurt te lang
hoe test ik de deelbaarheid van 329743 en het getal 451 bijvoorbeeld?

eddie 16-04-2002 20:13

Citaat:

^AmArU^ schreef:


Ja maar bijvoorbeeld iets als 1/500000 duurt best lang
iig
je merkt het verschil
maja goed
het duurt te lang
hoe test ik de deelbaarheid van 329743 en het getal 451 bijvoorbeeld?

1/500000 duurt lang ja, maar
1 % 500000 niet. '%' staat voor mod, in de meeste programmeertalen.

Mod kan zowiezo snel, want de CPU hoeft geen FP berekeningen uit te voeren...

eddie 16-04-2002 20:15

Citaat:

^AmArU^ schreef:


kan ook :)

ik bedoelde fpart :P
fpart=het deel ahcter de komma
bijvoorbeeld

23 mod 6=
23/6 = 3.833333
dan fpart() = 0.8333
* 6 = 5

:)

Ik zou het anders doen...
int(23/6) = 3
rest = 23 - 3 * 6 = 5 :)
Is sneller; minder tot geen FP berekeningen. :)

^AmArU^ 16-04-2002 21:57

FP berekeningen?

eddie 17-04-2002 07:29

Floating Point berekeningen, getallen met een komma erin.

Bijvoorbeeld
8.3065 * 2.445
3/4 (=0.75)

Dat soort getallen...

Dit is processor intensief, omdat het moeilijk is uit te rekenen.

Tampert 17-04-2002 21:40

hmmnzz.. ik dacht dat een computer altijd rekende met floating point getallen. 2 wordt namelijk in binair weergegeven als:

.100 * 10^2

o.i.d.

eddie 18-04-2002 09:22

Citaat:

Tampert schreef:
hmmnzz.. ik dacht dat een computer altijd rekende met floating point getallen. 2 wordt namelijk in binair weergegeven als:

.100 * 10^2

o.i.d.

euh... hoe wou jij 2.25 binair gaan weergeven?

Het binaire stelsel kent, net zoals het hexadecimale, geen reële getallen.

2d = 0000 0010b
2.25d = ???? ????b

Tja... kan niet echt... :)

GinnyPig 18-04-2002 12:30

een decimaal getal kan je schrijven als:

23,23

Wat ook geschreven kan worden als:
2 * 10^1 + 3 * 10^0 + 2 * 10^-1 + 3* 10^-2

Voor een hexadecimaal getal geldt dat het grondtal niet 10 maar 16 is. Het principe blijft echter hetzelfde, en dus kan je komma getallen ook in het hexadecimale getallenstelsel schrijven.

2,5A is dus eigenlijk:

2 * 16^0 + 5 * 16^-1 + 10*16^-2 = 2 + 5/16 + 10/256 = 2,3515625 (in decimale vorm)

Voor binair gaat dit uiteraard ook op maar dan met een grondtal 2. Dus:

101,101 = 2^2 + 2^0 + 2^-1 + 2^-3 = 4 + 1 + 1/2 +1/8 = 5,625

eddie 18-04-2002 12:33

En hoe wou je dat binair gaan uitrekenen?

Zoals een computer doet dus?

[fluister mode]
Pssst... gaan we nu stiekum de processor ontleden en kijken hoe deze het oplost?
[/fluister mode]

GinnyPig 18-04-2002 12:56

Citaat:

eddie schreef:
En hoe wou je dat binair gaan uitrekenen?

Zoals een computer doet dus?

[fluister mode]
Pssst... gaan we nu stiekum de processor ontleden en kijken hoe deze het oplost?
[/fluister mode]

Ik zeg niet dat het sneller of handiger is... Ik zeg alleen dat een komma in het binaire stelsel wel degelijk voorkomt :)

eddie 18-04-2002 13:01

Citaat:

GinnyPig schreef:


Ik zeg niet dat het sneller of handiger is... Ik zeg alleen dat een komma in het binaire stelsel wel degelijk voorkomt :)

Je bedoelt voor kan komen :)

En waarom dan de rekenmachine van Windows 98 het niet dan?

Maar je kunt geen voorstelling geven van een binair getal waar een komma inzit.

00110101.1001 _kan_ gewoon niet...

pol 18-04-2002 13:15

Hier is een mogelijke mannier om een decimaal getal binair te schrijven :

Je kunt elk getal x schrijven als :

x= +of- q * 2^m

waarbij 1/2 =<q<1, en meen geheel getal.
Het getal q is dan de mantisse en m de exponent.
Als we beide binair voorstellen, hebben we een vlottende komma getal geconstrueerd.

Als we nu een woordlengte van 32 bits ter beschikking hebben, kunnen we ze (meestal) zo verdelen :

1bit voor het teken van x.
1bit voor het teken van de exponent m.
7 bits voor de exponent abs(m).
23 bits voor voor de mantisse abs(q).

Er moet wel bijgezegd worden dat men in de praktijk meer gebruik maakt van complement notaties, dan gebruik te maken van tekenbits.

eddie 18-04-2002 13:31

Ja, dan worden truukjes toegepast om het weer te geven...

GinnyPig 18-04-2002 18:34

Citaat:

eddie schreef:

00110101.1001 _kan_ gewoon niet...

Hoezo kan niet? :/

Wat ik heb geleerd, geldt dat:
00110101.1001 = 110101.1001 = binaire vorm.

Decimale vorm:
1*2^5+ 1*2^4 + 1*2^2 + 1*2^0 + 1*2^-1 + 1*2^-4 =
32 + 16 + 4 + 1 + 1/2 + 1/16 = 53 9/16 = 53,5625

Dus jouw getal in binaire vorm (met komma) is wel degelijk een getal in decimale vorm (met komma). Of bedoelde je dat niet?

^AmArU^ 18-04-2002 18:40

dus dan moet men voor alle getallen na de komma ook bits reserveren? dan wordt alles dus enkele malen zo groot

eddie 18-04-2002 18:43

Citaat:

GinnyPig schreef:


Hoezo kan niet? :/

Wat ik heb geleerd, geldt dat:
00110101.1001 = 110101.1001 = binaire vorm.

Decimale vorm:
1*2^5+ 1*2^4 + 1*2^2 + 1*2^0 + 1*2^-1 + 1*2^-4 =
32 + 16 + 4 + 1 + 1/2 + 1/16 = 53 9/16 = 53,5625

Dus jouw getal in binaire vorm (met komma) is wel degelijk een getal in decimale vorm (met komma). Of bedoelde je dat niet?

Het zou misschien wel kunnen op schrift, maar het kan niet in de computer!

Zo duidelijk genoeg? :p

Tampert 18-04-2002 18:49

Citaat:

eddie schreef:

euh... hoe wou jij 2.25 binair gaan weergeven?

Het binaire stelsel kent, net zoals het hexadecimale, geen reële getallen.

2d = 0000 0010b
2.25d = ???? ????b

Tja... kan niet echt... :)

da zeg ik toch ook nie? :p

Ik zeg alleen dat een computer ook gehele (of natuurlijke, zo je terminologisch wil :p) getallen weergeeft als een float0ing-point getal vermenigvuldigd met een macht van 2.

eddie 18-04-2002 18:56

Citaat:

Tampert schreef:


da zeg ik toch ook nie? :p

Ik zeg alleen dat een computer ook gehele (of natuurlijke, zo je terminologisch wil :p) getallen weergeeft als een float0ing-point getal vermenigvuldigd met een macht van 2.

Nogmaals:

WIJ kunnen wel met machten enzo werken en zodoende een binair reeël getal weergeven, maar voor de CPU is dat onmogelijk.

In de computer zijn alleen maar natuurlijke getallen. En aangezien natuurlijke getallen geen reeële zijn, kan het dus niet zonder truukjes.

Hetzelfde geldt voor negative getallen. Deze worden 'gevormd' een complement berekeningen...

GinnyPig 19-04-2002 09:06

Citaat:

eddie schreef:

Het zou misschien wel kunnen op schrift, maar het kan niet in de computer!

Zo duidelijk genoeg? :p

Oooohhhhhh, bedoel je het zooooooo :D


Alle tijden zijn GMT +1. Het is nu 08:50.

Powered by vBulletin® Version 3.8.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.