Variablen mir einem wert von 100 ziffern?
Übersicht

dark19GastBetreff: Variablen mir einem wert von 100 ziffern? |
![]() Antworten mit Zitat |
|
---|---|---|
Kann man machen da variablen größer als 1ne bilionen(ist geschätzt) sind?
mfg dark19 |
||
![]() |
5k41 |
![]() Antworten mit Zitat ![]() |
---|---|---|
mal vorweg: wozu braucht man sowas?
MfG |
||
Projekte:
For a better World - Gesellschaftsspiel ( 100%) User posted image |
![]() |
RallimenSieger des 30-EUR-Wettbewerbs |
![]() Antworten mit Zitat ![]() |
---|---|---|
Variablen in Blitz haben immer 32Bit!
Mehr geht nicht! Siehe http://www.blitzbase.de/tabellen/datentypen.htm Um größere Zahlen zu berechnen mußt du auf diverse Funktionen zurückgreifen! Eine Möglichkeit ist es das mit Strings zu machen! https://www.blitzforum.de/foru...php?t=9725 Eine andere Möglichkeit wäre das mit einem Array zu machen, was bestimmt schneller ist als wie das mit den Strings! Und da fällt mir noch eine ein! Blitz Basic rechnet mit 32 Bit Schreib dir ein Programm was beispielsweise mit 512 Bit rechnen kann! |
||
[BB2D | BB3D | BB+]
|
![]() |
pixelshooter |
![]() Antworten mit Zitat ![]() |
---|---|---|
@5k41: z.B. wenn du was mit RSA machen willst!
@Rallimen: wie geht das, ds mit den 512 Bit? |
||
>> Musikerstellung, Grafik und Design: http://www.pixelshooter.net.tc |
phil217 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich hatte vor ein paar Tagen auch die Idee mit RSA ^^
bin ebenso an den grossen zahlen gescheitert, habs mit arrays versucht, aber scheinbar auf die falsche Weise meine Multiplikationen dauern zu lang (bei 30 Stellen bis zu 20 sec) das mit den Strings find ich gut wobei mir noch die Modulo Funktion fehlt, aber die lasst sich sicher leicht scripten mein Quelltext:(noch nicht auskommentiert, das reiche ich nach wenn ich wieder zu hase bin, also in 3 stunden oder morgen) So jetzt mit Kommentaren(spärlich^^) EDIT: ich hab die multiplikation mal nach dem vorbild von Rallimen verändert jetzt schafft er 3000stellige zahlen zu multiplizieren in ca 15 ms danke für die vorlage^^ Graphics 1000,700,32,2 Dim a(1000) Dim a_str$(1000) Dim b(1000) Dim b_str$(1000) Dim c(3000) Dim c_Str$(3000) Global temp_str Global temp Global erg$ Global zahl1$ Global zahl2$ SeedRnd MilliSecs() Global ziffern_ab = 1000 ;Die Zahl wird aufmehrere Felder Global ziffern_c = 3000 ;mit jeweils drei ziffern aufgeteilt For i = 0 To ziffern_ab ;Felder mit Zufallszahlen füllen a(i) = Rand(0,999) a_str(i) = a(i) While Len(a_str(i)) < 3 a_str(i) = "0" + a_str(i) Wend zahl1 = zahl1 + a_str(i) b(i) = Rand(0,999) b_str(i) = b(i) While Len(b_str(i)) < 3 b_str(i) = "0" + b_str(i) Wend zahl2 = zahl2 + b_str(i) Next temp = 0 For i = ziffern_ab To 0 Step -1 ;Zahl1 ausgeben If Len(a_str(i))<> 0 And a(i) <> 0 temp = 1 ;erst wenn Zahlen(keine Nullen) mehr kommen EndIf If temp = 1 Write a_str(i) ;dann beginnt die Ausgabe If i > 0 Write "." EndIf EndIf Next Print "" Print "x" temp = 0 For i = ziffern_ab To 0 Step -1 ;Zahl2 ausgeben If Len(b_str(i))<> 0 And b(i) <> 0 temp = 1 EndIf If temp = 1 Write b_str(i) If i > 0 Write "." EndIf EndIf Next time = MilliSecs() ;Zeit nehmen plus_a_b() time2 = MilliSecs() Print "" Print "Dauer: " + (time2-time) + "ms" Print "" Print "" temp = 0 For i = ziffern_c To 0 Step -1 ;Ergebnis ausgeben If Len(c_str(i))<> 0 And c(i) <> 0 temp = 1 EndIf If temp = 1 While Len(c_str(i)) < 3 c_str(i) = 0 + c_str(i) Wend Write c_str(i) erg = erg + c_str(i) ; If (ziffern_c - i) Mod 30 = 0 ; Print "" ; If (ziffern_c - i) Mod 1200 = 0 ; Print "Taste drücken" ; WaitKey ; EndIf ; EndIf If i > 0 Write "." EndIf EndIf Next Print "" Print Len(zahl1) Print Len(zahl2) Print "" Print Len(erg) WaitKey End Function plus_a_b() For i = 0 To ziffern_ab c(i) = a(i) + b(i) c_str(i) = c(i) Next For i = 0 To ziffern_ab + 1 If Len(c_str(i)) > 3 temp_str = Left(c_str(i),1) temp = temp_str c(i) = c(i) - temp * 1000 c(i + 1) = c(i + 1) + temp c_str(i) = RSet(c_str(i),3) c_str(i + 1) = c(i + 1) EndIf Next ;For i = 0 To ziffern_ab + 1 ;andere,etwas langsamere Methose ; c_str(i) = c(i) ; If c(i) > 999 ; c(i+1) = c(i+1) + Int(Left(c_str(i),Len(c_str(i)) - 3)) ; c(i) = Int(Right(c_str(i),3)) ; EndIf ; c_str(i) = c(i) ;Next End Function Function minus_a_b() For i = 0 To ziffern_c c(i) = 0 Next temp = -1 For i = ziffern_ab To 0 Step -1 If a(i) < b(i) temp = 0 Exit ElseIf a(i) > b(i) temp = 1 Exit EndIf Next If temp = 1 For i = 0 To ziffern_ab c(i) = a(i) - b(i) Next For i = 0 To ziffern_c If c(i) < 0 c(i + 1) = c(i + 1) - 1 c(i) = c(i) + 1000 EndIf c_str(i) = c(i) Next EndIf End Function Function mal_a_b() For i = 0 To ziffern_ab For j = 0 To ziffern_ab c(i+j) = c(i+j) + a(i) * b(j) Next Next For i = 0 To ziffern_ab + ziffern_ab + 1 c_str(i) = c(i) If c(i) > 999 c(i+1) = c(i+1) + Int(Left(c_str(i),Len(c_str(i)) - 3)) c(i) = Int(Right(c_str(i),3)) EndIf c_str(i) = c(i) Next End Function |
||
- Zuletzt bearbeitet von phil217 am Di, Apr 25, 2006 21:39, insgesamt 2-mal bearbeitet
![]() |
SoNenTyp |
![]() Antworten mit Zitat ![]() |
---|---|---|
Bank befehle bitte durchlesen. Damit kann man relativ schnell mit seeeeeehhhrrrrr (und ich meine wirklich sehr) großen zahlen rechnen.
Dann währe noch die Möglichkeit mit Strings aber das ist ziemlich langsam. PS den Edit-Button fände ich mit Schfit besser. Hab gerade 2 Minuten danach gesucht. |
||
Gruss Der Typ.
User posted image |
Florian |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
@dark19
Such dir am Besten eine spezial Programmiersprache, die das kann. |
||
Das große BlitzBasic Community Tutorial
Stackmaschine 2.0 |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group