Scholieren.com forum

Scholieren.com forum (https://forum.scholieren.com/index.php)
-   Huiswerkvragen: Exacte vakken (https://forum.scholieren.com/forumdisplay.php?f=17)
-   -   [WI] Programma dat grote getallen aankan (https://forum.scholieren.com/showthread.php?t=1693684)

the unknown 1 27-05-2008 19:47

[WI] Programma dat grote getallen aankan
 
Ik zoek een programma, dat zelfde formules als EXCEL gebruikt , maar wel 365! aankan. (faculteit 365)

Mijn bedoeling is om
uitkomst = 1-(FACULTEIT(365)/(MACHT(365;n))+(FACULTEIT(365-n)))
te berekenen voor n= 0 respectievelijk 1 tot 100.

Iemand een die waar 'k een downloadbaar programma hiervoor kan vinden? (liefst gratis dus.)


regards, Tom

dutch gamer 27-05-2008 20:03

Maple kan het wel (geeft in ieder geval een antwoord):

365! =251041286755587322929294437488120277051655202698760797668725951939011 0613822093741966601800900025416937617231436098232866070807112336997985 3445367910653872383599704355532740937678091491429440864316046925074510 1348470255460140980059079655410411954961053118861733734351455171932827 6084775588229169021353912347918627470151939680850494072260703300124632 8398800550487427999876690416973437861078185344667966871511049653888130 1368361990105291800561258445494886486176829158263475641489909841380678 0999960468748814673483734069935983879112499595758453887361666153309325 3551256845056046388738129702951381151861413688922986510005440943943014 6992441125557552791407604927642537402504103910564219790032896000000000 0000000000000000000000000000000000000000000000000000000000000000000000 0000000000

Maar dit is sowieso niet gratis en kan volgens mij ook geen scripts aan, dus dan zou je het 100 keer moeten typen.

the unknown 1 27-05-2008 20:29

Citaat:

dutch gamer schreef: (Bericht 27618457)
Maple kan het wel (geeft in ieder geval een antwoord):

365! =251041286755587322929294437488120277051655202698760797668725951939011 0613822093741966601800900025416937617231436098232866070807112336997985 3445367910653872383599704355532740937678091491429440864316046925074510 1348470255460140980059079655410411954961053118861733734351455171932827 6084775588229169021353912347918627470151939680850494072260703300124632 8398800550487427999876690416973437861078185344667966871511049653888130 1368361990105291800561258445494886486176829158263475641489909841380678 0999960468748814673483734069935983879112499595758453887361666153309325 3551256845056046388738129702951381151861413688922986510005440943943014 6992441125557552791407604927642537402504103910564219790032896000000000 0000000000000000000000000000000000000000000000000000000000000000000000 0000000000

Maar dit is sowieso niet gratis en kan volgens mij ook geen scripts aan, dus dan zou je het 100 keer moeten typen.

hmmm, jij toevallig gn zin voor 100x van zulke uitspraken voor me door te geven via msn?

ILUsion 28-05-2008 00:33

Maple kan wel scripts aan, maar ik kan er zelf ook nog niet mee werken. Verder zal Matlab er ook wel mee overweg kunnen, als je daar wat mee vertrouwd bent, valt het misschien eens te proberen of Octave (gratis alternatief voor Matlab) het ook niet zou kunnen. En misschien kan Maxima (ook een CAS zoals Maple, maar gratis dan) ermee overweg.

Een programmeertaal die er volgens mij wel mee overweg kan is Python en dat is wel gratis en niet zo moeilijk te leren :)

Voor Python kan je het volgende gebruiken:
Code:

from decimal import *

a = 365
lim = 100
fac = { 1:1 }
prec = 0


# faculteiten uitrekenen
for n in range(2,365):
    fac[n] = fac[n-1] * n



for n in range(1,lim + 1):
    f = fac[n]
    g = (a**n + fac[a-n])
    getcontext().prec += prec
    res = 1-fac[n]/(a**n + fac[a-n])
    getcontext().prec -= prec
    print 'n = %d \n f = %d \n g = %d \n x = 1 - f/g = %d\n\n'%(n,f,g,res)

Hierbij merk ik al direct op: het probleem is niet het omgaan met gigantische getallen, want dat is niet zo heel moeilijk. Maar juist kleine getallen, die geven een probleem. Bij die deling door een gigantisch getal, ga je buiten de mogelijkheden van klassieke floating point-getallen werken van een computer. Er zullen vast wel bibliotheken zijn die daarmee kunnen werken, maar ik vrees dat ze best veel rekentijd zullen opslorpen. Ik heb die dan uiteindelijk ook in bovenstaande code ingebouwd (geen verdere ervaring mee gehad, dus misschien mis ik iets): hij blijft op 1 uitkomen steeds, zelfs met 1500 extra digits (vermoed ik toch dat hij dat neemt, als ik prec = 1500 zet).

De output die ik krijg, zijn correcte waarden voor f en g (dus die gigantische getallen), maar als totale uitkomst steeds 1 omdat er gewoon amper te werken valt met die gigantisch kleine getallen.

Als je meer informatie geeft, wil ik best eens in matlab kijken wat hij geeft, maar daar zal je tegen gelijkaardige problemen aanlopen, lijkt me.

dutch gamer 28-05-2008 14:29

Ik had MATLAB ook al geprobeerd, maar dat gaf bij mij overigens gewoon 365! = Inf. Misschien dat je nog ergens in kan stellen dat hij met grotere getallen kan rekenen, maar ik betwijfel het.

@ the unknown 1: nee sorry, ik ga niet 100 van dit soort getallen uitrekenen en doorgeven via msn.

the unknown 1 28-05-2008 14:33

Laat trouwens maar, vriend van me heeft scriptje voor me geschreven waardoor het al opgelost is ;)

ILUsion 28-05-2008 17:07

En je komt als uiteindelijke uitkomst iets anders dan 1 uit? Best straf dan :)

the unknown 1 28-05-2008 21:25

'k heb al gemerkt dat ik formule hier trouwens fout heb overgenomen :$
1-(FACULTEIT(365)/(MACHT(365;n))+(FACULTEIT(365-n)))
moet dus ..
1 - ((faculteit 365)/(macht 365;n).faculteit(365)n)) zijn..
:$

Gunkan 29-05-2008 05:43

Kan je dat scriptje hier dan ook plaatsen The Unknown? Daar zullen meer mensen wel wat aan hebben :)

ILUsion 29-05-2008 13:27

Volgens mij heb je hem opnieuw verkeerd geplaatst, ofwel is hij vrij simpel te vereenvoudigen.

Bedoel je dit:


of is het echt dit (wat er nu bij jou staat):

the unknown 1 29-05-2008 18:45

'k bedoel het eerste;)
& kzal script binnekort eens plaatsen;)


Alle tijden zijn GMT +1. Het is nu 20:03.

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