Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
d1rty.h4rry

Anmeldungsdatum: 05.10.2006 Beiträge: 116 Wohnort: Cassel
|
Verfasst am: 07.08.2008, 23:24 Titel: fakultätenberechnungs proggi :) |
|
|
hi leute, ich war lange nicht mehr hier sry
Ich hab da mal ne Frage.. ich hab ein Programm in FB geschrieben was Fakultäten berechnen kann-> und diese als komplett ausgeschriebene Zahl anzeigen bzw. in einer Datei ablegen kann, nur ist mein Problem das es ziemlich langsam ist. so kann es beispielsweise die Fakultät aus 400 problemlos in ca. 1min anzeigen
Zitat: | Fakultät aus 400:
64034522846623895262347970319503005850702583026002959458684445
94280239716918683143627847864746326467629435057503585681084829
81628835174352289619886468029979373416541508381624264619423523
07046244325015114448670890662773914918117331955996440709549671
34529047702032243491121079759328079510154537266725162787789000
93497637657103263503315339653498683868313393520243737881577867
91506311858702618270169819740062983025308591298346162272304558
33952075961150530223608681043329725519485267443223243866994842
24042325998055516106359423769613992319171340638589965379701478
27206606320217379472010321356624613809077942304597360699567595
83609615871512991382228657857954936161765448045322200782581840
08484364155912294542753848035583745180226759000613995601455952
06127211192918105032491008000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000
|
jedoch dauert es bei !1000 sehr lange so 20-30minuten...
Ich hab das Programm geschrieben xD um nem Kumpel zu beweisen,
dass man die Fak.!11111 auch mit mit FB berechnen kann
aber lol bei der Zahl würde es Tage nicht sogar Wochen dauern
bis der auf ne Lösung kommt..
Für das Programm hab ich eine String-Addier routine gebastelt..
so kann man beispielsweisen "245390486340586304958603945" mit "40"
addieren ohne das am ende irgendwas mit 23.454e234 oda so rauskommt
sondern die komplette Zahl.
hier mal die Routine
Code: | Function StrAdd(Sum1$,Sum2$) As String
a$=Sum1$
b$=Sum2$
If Len(a$) < Len(b$) Then
swap a$,b$
g=Len(a$)-Len(b$)
For t=0 To g: b$="0"+b$: Next
ElseIf Len(a$) = Len(b$) then
a$="0"+a$
b$="0"+b$
ElseIf Len(a$) > Len(b$) Then
g=Len(a$)-Len(b$)
For t=0 To g: b$="0"+b$: Next
a$="0"+a$
EndIf
For Z = Len(a$) To 1 Step -1
fa$=Mid(a$,Z,1)
fb$=Mid(b$,Z,1)
g$=Str(Val(fa$)+Val(fb$)+e)
If e=1 Then e=0
If Len(g$)>1 Then
e=1
g$=Right(g$,1)
EndIf
c$=g$+c$
Next
If Left(c$,1)="0" Then c$=Right(c$,Len(c$)-1)
Return c$
End Function
|
alles vllt. ein bisschen OldScool aba ich hab das lang nicht mehr gemacht
*hust* und jetzt meine Frage wie kann ich das alles beschleunigen
so das ich für ne Fakultät aus 11111 vielleicht nicht ne woche sondern ne stunde oda so
brauche
kommt leute ich will die wette nicht verlieren xD
ich danke alle die zumindest versuchen mir zu helfen
euer d1rty h4rRy _________________ "Das Fernsehen ist so etwas wie eine geistige Neutronenbombe, das Gehirn wird weggestrahlt. Nur der Kopf bleibt da!" -Olliver Kalkhofe
-> http://fernsehkritik.tv/tv-magazin/
"Wenn alle Stricke reißen, dann häng ich mich auf", Karl Kreiss  |
|
Nach oben |
|
 |
The_Muh aka Mark Aroni

Anmeldungsdatum: 11.09.2006 Beiträge: 718
|
Verfasst am: 08.08.2008, 00:09 Titel: |
|
|
Ich hab mir mal erlaubt den Code lesbarerer zu machen, außerdem hab ich das Declare dazugesetzt und die Variablen deklariert. Ausprobiert hab ich den Code allerdings nicht.
hier die Lesbare Fassung:
Code: | declare function strAdd(sum1 as string, sum2 as string) as string
FUNCTION StrAdd(Sum1 as string,Sum2 as string) AS STRING
dim as string a, b,fa,fb,c,gS
dim as integer t,g,z,e
a=Sum1
b=Sum2
IF LEN(a) < LEN(b) THEN
swap a,b
g=LEN(a)-LEN(b)
FOR t=0 TO g
b="0"+b
NEXT
ELSEIF LEN(a) = LEN(b) THEN
a="0"+a
b="0"+b
ELSEIF LEN(a) > LEN(b) THEN
g=LEN(a)-LEN(b)
FOR t=0 TO g
b="0"+b
NEXT
a="0"+a
END IF
FOR Z = LEN(a) TO 1 STEP -1
fa=MID(a,Z,1)
fb=MID(b,Z,1)
gS=STR(VAL(fa)+VAL(fb)+e)
IF e=1 THEN
e=0
end if
IF LEN(gS)>1 THEN
e=1
gS=RIGHT(gS,1)
END IF
c=gS+c
NEXT
IF LEFT(c,1)="0" THEN c=RIGHT(c,LEN(c)-1)
RETURN c
END FUNCTION |
mfg
The_Muh _________________ // nicht mehr aktiv // |
|
Nach oben |
|
 |
MisterD

Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 08.08.2008, 02:01 Titel: |
|
|
Strings sind einfach zu langsam, du kannst auf arrays umsteigen, dann wird das ganze schneller. ist allerdings wenn mans ordentlich macht wesentlich denkintensiver. Aber man kanns auch nicht-ordentlich machen und einfach jeden index nur mit nem wert von 0 bis 9 belegen, dann ists ziemlich genauso einfach, man muss halt nur die passende größe finden oder mit redim preserve arbeiten (und hier bitte nicht in einzelschritten vergrößern, sondern immer gleich 100 stellen ergänzen wenns mal voll ist oder so weil jedes vergrößern ist auch wieder endlos langsam). _________________ "It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 08.08.2008, 12:51 Titel: |
|
|
der direkte speicherzugriff ist schneller als MID/LEFT/RIGHT.
du kannst strings auch mit stringname[position] ansprechen, um das zeichen an einer bestimmten position zu ermitteln (liefert den ascii-code zurück). _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
Heizi

Anmeldungsdatum: 19.01.2005 Beiträge: 309
|
Verfasst am: 08.08.2008, 12:59 Titel: |
|
|
ich kenn mich zwar nicht so aus aber ich glaub die Fakultät hat doch was mit multiplizieren zu tun oder???
also zB
5*4*3*2*1
man kann multiplikation zwar auch durch addition ersetzen das ist aber glaub ich net sinnvoll.
vielleicht könntest du ja ne string multiplikationsroutine schrieben??
MfG |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 08.08.2008, 13:28 Titel: |
|
|
ich hab nicht geguckt, was das programm genau macht, aber eine multiplikation ist auch nur eine addition...  _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
d1rty.h4rry

Anmeldungsdatum: 05.10.2006 Beiträge: 116 Wohnort: Cassel
|
Verfasst am: 08.08.2008, 13:51 Titel: |
|
|
ich danke euch für eure Antworten
also:
@the_muh: nice danke ich hab das nur so schnell hingeproggt für declarationen hatte ich keine zeit ... das waren ja auch nur 1-2h Arbeit..
@misterD: Ich glaube ich werde auf arrays umsteigen, aber ich nehm mir die zeit es richtig zu machen, ich werde wohl die Index(e) voll ausnutzen
mit zum beispiel UInteger hab ich ja eigentlich genug stellen pro Index zur verfügung.. danke^^
@jojo: ich mach das nochmal mit arrays.. is aber eine gute idee aber für ne fakultät aus 11111 wird das wohl auch nicht reichen
@Heizi: es ist ja richtig !5= 1*2*3*4*5 aber eine Routine für Multiplikation und Strings würde wieder nur in einer Addition (so wie ich sie habe) enden.
man kann zwar Strings Multiplizieren mit z.b. Code: | c$ = str( Val( a$ ) * Val( b$ ) ) |
doch bei großen Zahlen kürzt er ab -> 21.54e21 oder sowas
und da ich alles komplett anzeigen will ist das nicht das richtige
die Routine funktioniert wie eine schriftliche Addition auf einem blatt papier
Code: | String1$ = 3 4 6
+ String2$ = 3 5 6
+ 1 1
____________________
7 0 2
|
er nimmt halt jede Zahl einzeln und addiert sie zu der gegenübergestellten zahl
die "eins im sinn" wird in der jeweiligen nächsten rechnung hinzuaddiert
also mein Fakultätenrechner mit Strings ist Komplett fertig wenn es Jemanden Interessiert poste ich den Code mal hier oda geb nen Link..
bloß das beeinhaltet auch das ich den Code auifräumen muss
wer noch tips oder Vorschläge hat immer posten.. ich nehm auch gern kritik
Wenn meine Array Routine fertig ist, kann ich sie ja mal unter Projektvorstellungen veröffentlichen
vorrausgesetzt sie ist schneller
euer d1rty h4rry[/code] _________________ "Das Fernsehen ist so etwas wie eine geistige Neutronenbombe, das Gehirn wird weggestrahlt. Nur der Kopf bleibt da!" -Olliver Kalkhofe
-> http://fernsehkritik.tv/tv-magazin/
"Wenn alle Stricke reißen, dann häng ich mich auf", Karl Kreiss 
Zuletzt bearbeitet von d1rty.h4rry am 08.08.2008, 14:03, insgesamt einmal bearbeitet |
|
Nach oben |
|
 |
28398
Anmeldungsdatum: 25.04.2008 Beiträge: 1917
|
Verfasst am: 08.08.2008, 14:01 Titel: |
|
|
Gabs da nichmal so eine Library für die FB sogar Header hatte ähem... BigInt glaub ich hiess die, die konnte (glaube ich) sogar 128-Bit Fließkommazahlen verarbeiten...
Naja volta's Seite ist momentan leider down, da gabs aber ein Tutorial wie man mit 80-Bit Fließkommazahlen rechnen kann, und auch noch die FPU dafür nutzt....
Achja und ich glaube GSL war auch noch eine feine Mathelib... |
|
Nach oben |
|
 |
d1rty.h4rry

Anmeldungsdatum: 05.10.2006 Beiträge: 116 Wohnort: Cassel
|
Verfasst am: 08.08.2008, 14:07 Titel: |
|
|
wieviel stellen krieg ich denn mit 128 bzw. 80bit ? denn die fakultät aus 400 hat allein schon 1009 stellen _________________ "Das Fernsehen ist so etwas wie eine geistige Neutronenbombe, das Gehirn wird weggestrahlt. Nur der Kopf bleibt da!" -Olliver Kalkhofe
-> http://fernsehkritik.tv/tv-magazin/
"Wenn alle Stricke reißen, dann häng ich mich auf", Karl Kreiss  |
|
Nach oben |
|
 |
28398
Anmeldungsdatum: 25.04.2008 Beiträge: 1917
|
Verfasst am: 08.08.2008, 14:49 Titel: |
|
|
Das stand auch alles auf volta's seite... |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4702 Wohnort: ~/
|
Verfasst am: 08.08.2008, 15:11 Titel: |
|
|
Kleiner Einwurf zur Abschätzung der Größe der gesuchten Zahl:
11111! ist ca. 2.183756731214578 * 10 ^ 40129 (Stirlingsche Näherung) _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
d1rty.h4rry

Anmeldungsdatum: 05.10.2006 Beiträge: 116 Wohnort: Cassel
|
Verfasst am: 08.08.2008, 15:19 Titel: |
|
|
ja genau das sind ca 40000 stellen.. mein kumpel hat die zahlen ausgedruckt 7 Din A4 seitenmit zahlen^^ is net wenig.. deswegen sind wohl 128Bit viel zu wenig  _________________ "Das Fernsehen ist so etwas wie eine geistige Neutronenbombe, das Gehirn wird weggestrahlt. Nur der Kopf bleibt da!" -Olliver Kalkhofe
-> http://fernsehkritik.tv/tv-magazin/
"Wenn alle Stricke reißen, dann häng ich mich auf", Karl Kreiss  |
|
Nach oben |
|
 |
MisterD

Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 08.08.2008, 15:49 Titel: |
|
|
Jojo hat Folgendes geschrieben: | ich hab nicht geguckt, was das programm genau macht, aber eine multiplikation ist auch nur eine addition...  |
Falsch, eine Multiplikation sind _viele_ additionen, und genau da braucht man rechenpower  _________________ "It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra |
|
Nach oben |
|
 |
28398
Anmeldungsdatum: 25.04.2008 Beiträge: 1917
|
Verfasst am: 08.08.2008, 16:23 Titel: |
|
|
Also in Software OHNE die Nutzung von der FPU wird das so oder so langsam sein... deswegen sollte man schon evtl. den haupt-rechenteil in asm coden... |
|
Nach oben |
|
 |
MisterD

Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 08.08.2008, 17:40 Titel: |
|
|
du kannst natürlich auch gleich den job an die gpu übergeben, allerdings bräuchtest du da vermutlich vorher noch n halbes jahr an ausbildung ums ungefähr zu können und zirka drei ums auch noch gut zu machen  _________________ "It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra |
|
Nach oben |
|
 |
d1rty.h4rry

Anmeldungsdatum: 05.10.2006 Beiträge: 116 Wohnort: Cassel
|
Verfasst am: 08.08.2008, 17:43 Titel: Erfolg |
|
|
So leute ich habs geschafft nun dauert es nurnoch 70 minuten um !11111 zu generieren yes wette gewonnen
ich hab alles auf Arrays umgestellt, jeder index nimmt 9-stellen auf..
(also 0-999999999)
das proggi kann nun Fakultäten bis zu 54000 stellen berechnen, also 9.999e53999 ist die maximale Zahl die geht
danke an euch
d!rTy H4RrY
P.S: Ziel erreicht, kann geschlossen werden es sei denn es gibt noch fragen  _________________ "Das Fernsehen ist so etwas wie eine geistige Neutronenbombe, das Gehirn wird weggestrahlt. Nur der Kopf bleibt da!" -Olliver Kalkhofe
-> http://fernsehkritik.tv/tv-magazin/
"Wenn alle Stricke reißen, dann häng ich mich auf", Karl Kreiss  |
|
Nach oben |
|
 |
MisterD

Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 08.08.2008, 17:50 Titel: |
|
|
na die diskussion über GPU muss doch wohl fortgeführt werden!  _________________ "It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra |
|
Nach oben |
|
 |
d1rty.h4rry

Anmeldungsdatum: 05.10.2006 Beiträge: 116 Wohnort: Cassel
|
Verfasst am: 08.08.2008, 18:01 Titel: |
|
|
mir egal was das ist hab k ahnung davon
d!rty h4rry _________________ "Das Fernsehen ist so etwas wie eine geistige Neutronenbombe, das Gehirn wird weggestrahlt. Nur der Kopf bleibt da!" -Olliver Kalkhofe
-> http://fernsehkritik.tv/tv-magazin/
"Wenn alle Stricke reißen, dann häng ich mich auf", Karl Kreiss  |
|
Nach oben |
|
 |
MisterD

Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 08.08.2008, 18:02 Titel: |
|
|
der prozessor auf deiner grafikkarte der kann schneller multiplizieren als dein richtiger prozessor, ist aber für softwarezwecke halt derzeit noch deutlich schwieriger anzusprechen als für grafikausgabe, da fehlen einfach noch bisschen die grundlagen _________________ "It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra |
|
Nach oben |
|
 |
d1rty.h4rry

Anmeldungsdatum: 05.10.2006 Beiträge: 116 Wohnort: Cassel
|
Verfasst am: 08.08.2008, 18:18 Titel: |
|
|
lol wozu hab ich ne CPU wenn ich sie nicht benutze^^ ich brauch die GPU nur für Grafik^^ und mein programm könnte vllt schneller arbeiten.. aber es reicht mir doch so^^ soll mir aussm stehgreif erstmal einer nachmachen
hab jetz 3h dran gesessen^^
dirty harry
p.S: Fakultät aus 11111 =
Zitat: |
21837567313476909160908242562798619573791474489761779. . . 40129 Stellen
->>> Scroll über 40000 Zeichen xD
|
EDIT: ich hab die Zahl mal abgekürzt.. (bugs auf der Seite dadurch ) _________________ "Das Fernsehen ist so etwas wie eine geistige Neutronenbombe, das Gehirn wird weggestrahlt. Nur der Kopf bleibt da!" -Olliver Kalkhofe
-> http://fernsehkritik.tv/tv-magazin/
"Wenn alle Stricke reißen, dann häng ich mich auf", Karl Kreiss  |
|
Nach oben |
|
 |
|