fakultät berechnen ...
-
Jockelx schrieb:
Wie geht nochmal unendlich in LaTex?
hey, der apparat heißt immer noch \LaTeX, klar?
-
was ist eigentlich latex, ich glaub kein kunstoff
-
"Latex ist ein Naturprodukt."
-
nee, kautschuk ist ein naturprodukt, die pariser die daraus gemacht werden nicht mehr ganz. also was ist das nu?
-
-
wie spricht man den das aus: Aussprache['lɑːteç],
-
schade das ich kein hebräisch oder russisch kann, hätt doch kein franz machen solln. lol
-
Hebräisch? Russisch? Wie kommst Du da jetzt drauf?
-
weiß nicht, soll dass lautschrift sein? 'lɑːteç
-
h4xX0r schrieb:
laut wikipedia soll das die zu \LaTeXgehörige Lautschrift sein
-
da fällt mir doch noch was ein:
für große n gibt es da die 'Stirlingsche'-Formel:
n! ungefähr= (2Πn)0,5*(n/e)n
post scriptum: ich würde so gerne Latex beherrschen
-
also ich hab das mal ausgetestet. mit einem 32bit langen unsigned int kommt man bis zu 12! bei einem 64bit unsigned long long (gcc) kommt man bis 20!
da kann man also problemlos eine tabelle benutzen. für grössere zahlen braucht man sowieso eine eigene library wie GMP und die hat dann ihre eigenen, optimierten algorithmen.d.h. ich würd sowas vorschlagen:
unsigned long long faculty(int n) { static const unsigned long long tab[] = {1, 1, 2, 6, 24, 120, 720, 5040, 40320, 362880, 3628800, 39916800, 479001600, 6227020800, 87178291200, 1307674368000, 20922789888000, 355687428096000, 6402373705728000, 121645100408832000, 2432902008176640000}; if(n>=0 && n<21) return tab[n]; else return 0; }
natürlich vorausgesetzt der compiler kennt einen entsprechenden 64bit datentyp. das "long long" müsste man gegebenenfalls ersetzen.
-
Wie wärs hiermit?...
#include <stdio.h> float fakultaet(float x); int main(){ float y=0,x; printf("\n\t\Geben Sie eine Zahl ein:"); scanf("%f",&x); y=fakultaet(x); if (y>999999.9) printf("\n\t\fakultaet(%8.1f) = %e",x,y); else printf("\n\t\fakultaet(%8.1f) = %8.1f",x,y); } float fakultaet (float x); float ergebnis=0; if (x<=1) ergebnis =1; else ergebnis =x*fakultaet(x-1); return ergebnis;
-
das ist die bereits besprochene rekursion
-
Ist zwar ein etwas älteres Thema, aber so kann man das ja nicht stehen lassen!
Wer die Faktultät "richtig" berechen will, der sollte mal nach
"Boiten Split", "Recursive Product" oder auch Primfaktorzerlegung
googeln.Jockel
-
const double fac(double n) { return sqrt(6.283185307 * n) * pow(n / 2.718281828, n); }
-
Noch eine unnötige Methode
template<unsigned int N> struct Fak { enum { V=N*Fak<N-1>::V }; }; template<> struct Fak<0> { enum { V=1 }; }; static const unsigned fak[] = { Fak<0>::V, Fak<1>::V, Fak<2>::V, Fak<3>::V, Fak<4>::V, Fak<5>::V, Fak<6>::V, Fak<7>::V, Fak<8>::V, Fak<9>::V, Fak<10>::V, Fak<11>::V, Fak<12>::V };
-
Wahnsinn! Da kann man ja gleich ne Bruchrechenklasse mit Templateargumenten bauen .
-
#include <stdio.h>
int main(void)
{
int i,n,p=1;
printf("Fakulteat n!( n<17, sonst Ueberlauf!)\n");
printf("n= ");
scanf("%d",&n);for(i=1;i<=n;i++)
{
p*=i;
}printf("Fuer %d! bekommt man %d\n",n,p);
}
-
Schleifendurchläufe: ich habe als test für n gleich 5 genommen.
1. p=1 i=1
(p *= i heisst ja auch p = p * i)
also p = 1 * 1
p = 11 * 2 = 2 // p = 1, i = 2
p = 22 * 3 = 6 // p = 2, i = 3
p = 64. 6 * 4 = 24 // p = 6, i = 4
p = 245. 24 * 5 = 120 // p = 24, i = 5
p = 120...
5! = 120