![]() |
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? |
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 :)... |
Citaat:
ik bedoelde fpart :P fpart=het deel ahcter de komma bijvoorbeeld 23 mod 6= 23/6 = 3.833333 dan fpart() = 0.8333 * 6 = 5 :) |
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. |
Citaat:
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... |
Citaat:
3294234324 / 3248723 is niet echt makkleijk denk ik |
Citaat:
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... |
Citaat:
iig je merkt het verschil maja goed het duurt te lang hoe test ik de deelbaarheid van 329743 en het getal 451 bijvoorbeeld? |
Citaat:
1 % 500000 niet. '%' staat voor mod, in de meeste programmeertalen. Mod kan zowiezo snel, want de CPU hoeft geen FP berekeningen uit te voeren... |
Citaat:
int(23/6) = 3 rest = 23 - 3 * 6 = 5 :) Is sneller; minder tot geen FP berekeningen. :) |
FP berekeningen?
|
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. |
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. |
Citaat:
Het binaire stelsel kent, net zoals het hexadecimale, geen reële getallen. 2d = 0000 0010b 2.25d = ???? ????b Tja... kan niet echt... :) |
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 |
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] |
Citaat:
|
Citaat:
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... |
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. |
Ja, dan worden truukjes toegepast om het weer te geven...
|
Citaat:
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? |
dus dan moet men voor alle getallen na de komma ook bits reserveren? dan wordt alles dus enkele malen zo groot
|
Citaat:
Zo duidelijk genoeg? :p |
Citaat:
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. |
Citaat:
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... |
Citaat:
|
Alle tijden zijn GMT +1. Het is nu 08:50. |
Powered by vBulletin® Version 3.8.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.