Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

fakultätenberechnungs proggi :)
Gehe zu Seite 1, 2  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
d1rty.h4rry



Anmeldungsdatum: 05.10.2006
Beiträge: 116
Wohnort: Cassel

BeitragVerfasst am: 07.08.2008, 23:24    Titel: fakultätenberechnungs proggi :) Antworten mit Zitat

hi leute, ich war lange nicht mehr hier sry lächeln

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 lächeln
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 lächeln

*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 lächeln

kommt leute ich will die wette nicht verlieren xD

ich danke alle die zumindest versuchen mir zu helfen lächeln

euer d1rty lachen 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 lächeln
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden MSN Messenger
The_Muh
aka Mark Aroni


Anmeldungsdatum: 11.09.2006
Beiträge: 718

BeitragVerfasst am: 08.08.2008, 00:09    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
MisterD



Anmeldungsdatum: 10.09.2004
Beiträge: 3071
Wohnort: bei Darmstadt

BeitragVerfasst am: 08.08.2008, 02:01    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 08.08.2008, 12:51    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Heizi



Anmeldungsdatum: 19.01.2005
Beiträge: 309

BeitragVerfasst am: 08.08.2008, 12:59    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 08.08.2008, 13:28    Titel: Antworten mit Zitat

ich hab nicht geguckt, was das programm genau macht, aber eine multiplikation ist auch nur eine addition... zwinkern
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
d1rty.h4rry



Anmeldungsdatum: 05.10.2006
Beiträge: 116
Wohnort: Cassel

BeitragVerfasst am: 08.08.2008, 13:51    Titel: Antworten mit Zitat

ich danke euch für eure Antworten lächeln

also:
@the_muh: nice danke lächeln ich hab das nur so schnell hingeproggt happy 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 lächeln

@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 lächeln

wer noch tips oder Vorschläge hat immer posten.. ich nehm auch gern kritik Zunge rausstrecken

Wenn meine Array Routine fertig ist, kann ich sie ja mal unter Projektvorstellungen veröffentlichen happy
vorrausgesetzt sie ist schneller lächeln

euer d1rty böse 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 lächeln


Zuletzt bearbeitet von d1rty.h4rry am 08.08.2008, 14:03, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden MSN Messenger
28398



Anmeldungsdatum: 25.04.2008
Beiträge: 1917

BeitragVerfasst am: 08.08.2008, 14:01    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
d1rty.h4rry



Anmeldungsdatum: 05.10.2006
Beiträge: 116
Wohnort: Cassel

BeitragVerfasst am: 08.08.2008, 14:07    Titel: Antworten mit Zitat

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 lächeln
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden MSN Messenger
28398



Anmeldungsdatum: 25.04.2008
Beiträge: 1917

BeitragVerfasst am: 08.08.2008, 14:49    Titel: Antworten mit Zitat

Das stand auch alles auf volta's seite...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4702
Wohnort: ~/

BeitragVerfasst am: 08.08.2008, 15:11    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
d1rty.h4rry



Anmeldungsdatum: 05.10.2006
Beiträge: 116
Wohnort: Cassel

BeitragVerfasst am: 08.08.2008, 15:19    Titel: Antworten mit Zitat

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 happy
_________________
"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 lächeln
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden MSN Messenger
MisterD



Anmeldungsdatum: 10.09.2004
Beiträge: 3071
Wohnort: bei Darmstadt

BeitragVerfasst am: 08.08.2008, 15:49    Titel: Antworten mit Zitat

Jojo hat Folgendes geschrieben:
ich hab nicht geguckt, was das programm genau macht, aber eine multiplikation ist auch nur eine addition... zwinkern


Falsch, eine Multiplikation sind _viele_ additionen, und genau da braucht man rechenpower zwinkern
_________________
"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
Benutzer-Profile anzeigen Private Nachricht senden
28398



Anmeldungsdatum: 25.04.2008
Beiträge: 1917

BeitragVerfasst am: 08.08.2008, 16:23    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
MisterD



Anmeldungsdatum: 10.09.2004
Beiträge: 3071
Wohnort: bei Darmstadt

BeitragVerfasst am: 08.08.2008, 17:40    Titel: Antworten mit Zitat

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 zwinkern
_________________
"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
Benutzer-Profile anzeigen Private Nachricht senden
d1rty.h4rry



Anmeldungsdatum: 05.10.2006
Beiträge: 116
Wohnort: Cassel

BeitragVerfasst am: 08.08.2008, 17:43    Titel: Erfolg Antworten mit Zitat

So leute ich habs geschafft nun dauert es nurnoch 70 minuten um !11111 zu generieren yes wette gewonnen lächeln

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 happy
danke an euch lächeln

d!rTy lächeln H4RrY

P.S: Ziel erreicht, kann geschlossen werden happy es sei denn es gibt noch fragen lächeln
_________________
"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 lächeln
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden MSN Messenger
MisterD



Anmeldungsdatum: 10.09.2004
Beiträge: 3071
Wohnort: bei Darmstadt

BeitragVerfasst am: 08.08.2008, 17:50    Titel: Antworten mit Zitat

na die diskussion über GPU muss doch wohl fortgeführt werden! happy
_________________
"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
Benutzer-Profile anzeigen Private Nachricht senden
d1rty.h4rry



Anmeldungsdatum: 05.10.2006
Beiträge: 116
Wohnort: Cassel

BeitragVerfasst am: 08.08.2008, 18:01    Titel: Antworten mit Zitat

mir egal lächeln was das ist happy hab k ahnung davon zwinkern

d!rty lächeln 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 lächeln
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden MSN Messenger
MisterD



Anmeldungsdatum: 10.09.2004
Beiträge: 3071
Wohnort: bei Darmstadt

BeitragVerfasst am: 08.08.2008, 18:02    Titel: Antworten mit Zitat

der prozessor auf deiner grafikkarte zwinkern 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
Benutzer-Profile anzeigen Private Nachricht senden
d1rty.h4rry



Anmeldungsdatum: 05.10.2006
Beiträge: 116
Wohnort: Cassel

BeitragVerfasst am: 08.08.2008, 18:18    Titel: Antworten mit Zitat

happy 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 lächeln
cool hab jetz 3h dran gesessen^^

dirty lächeln harry

p.S: Fakultät aus 11111 =
Zitat:

21837567313476909160908242562798619573791474489761779. . . 40129 Stellen happy
->>> Scroll über 40000 Zeichen xD


EDIT: ich hab die Zahl mal abgekürzt.. (bugs auf der Seite dadurch Zunge rausstrecken )
_________________
"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 lächeln
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden MSN Messenger
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Gehe zu Seite 1, 2  Weiter
Seite 1 von 2

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz