Variablen mir einem wert von 100 ziffern?

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

dark19

Gast

Betreff: Variablen mir einem wert von 100 ziffern?

BeitragMo, Apr 17, 2006 15:39
Antworten mit Zitat
Kann man machen da variablen größer als 1ne bilionen(ist geschätzt) sind?

mfg dark19

5k41

BeitragMo, Apr 17, 2006 15:43
Antworten mit Zitat
Benutzer-Profile anzeigen
mal vorweg: wozu braucht man sowas?

MfG
Projekte:
For a better World - Gesellschaftsspiel ( 100%)

User posted image

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragMo, Apr 17, 2006 16:40
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSa, Apr 22, 2006 11:33
Antworten mit Zitat
Benutzer-Profile anzeigen
@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

BeitragMo, Apr 24, 2006 18:50
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMo, Apr 24, 2006 20:56
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMo, Apr 24, 2006 21:14
Antworten mit Zitat
Benutzer-Profile anzeigen
@dark19
Such dir am Besten eine spezial Programmiersprache, die das kann.
Das große BlitzBasic Community Tutorial
Stackmaschine 2.0

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group