Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
TheMillenium Dark JLI'ler
Anmeldedatum: 21.07.2002 Beiträge: 1427 Wohnort: World Medaillen: Keine
|
Verfasst am: 10.01.2004, 15:48 Titel: Speicherbereiche reservieren? |
|
|
Wie kann ich nur Speicher reservieren?
ich möchte gar keinen Datentyp x-mal als Feld anlegen, sondern einfach einen Speicherbereich.. Geht das?
Oder wie kann ich sonst einen Datentyp anlegen, der 100* long int entspricht. Will mit sehr großen Werten rechnen aber dafür gibt es noch keine Datentypen und string-mathematik wird zu langsam werden will das ganze auf binärer Ebene rechnen... Oder kann ich dann auch so tun als ob new int[100]; eine einzige Zahl ist?
Vielen Dank für eure Hilfe! _________________ The source of all power is in its destiny... |
|
Nach oben |
|
|
Mazze JLI'ler
Alter: 39 Anmeldedatum: 02.01.2004 Beiträge: 145
Medaillen: Keine
|
Verfasst am: 10.01.2004, 16:27 Titel: Re: Speicherbereiche reservieren? |
|
|
TheMillenium hat Folgendes geschrieben: | Wie kann ich nur Speicher reservieren?
ich möchte gar keinen Datentyp x-mal als Feld anlegen, sondern einfach einen Speicherbereich.. Geht das?
|
jo (hab ich gerade in nem Thread davor was zu geschrieben )
Einfach nur Speicher kannst du mit VirtualAlloc reservieren...und mit VirutalFree wieder freigeben...wie die funktionen genau aussehen weis ich nicht |
|
Nach oben |
|
|
Mr.X Junior JLI'ler
Anmeldedatum: 15.04.2003 Beiträge: 88
Medaillen: Keine
|
Verfasst am: 10.01.2004, 18:00 Titel: ... |
|
|
TheMillenium hat Folgendes geschrieben: | ...Will mit sehr großen Werten rechnen aber dafür gibt es noch keine Datentypen... |
7,2 * 10 hoch 75 (32-bit-REAL) reicht Dir wohl nicht? ^^
@Speicherreservierung
Einen Datentyp wirst Du immer angeben müssen. Die Funktion, die Dir entsprechen sollte wird wohl malloc(...) sein. Du reservierst halt entsprechend Speicher in Länge Byte * Deiner notwendigen Größe und castest dann den Pointer auf diesen Speicherbereich je nachdem, wieviel Bits Du gerade auslesen willst. (Wobei das Casten auch nur auf vorgefertigte Datentypen funktionieren wird, und nicht zum Beispiel 45 Bit usw.)
Als Beispiel für Deine Angabe von 100 * long int
---> int* MeinSpeicher = (int*) malloc(100*sizeof(long int));
So hast Du einen DW-Pointer auf Deinen Speicherbereich.
P.S.
100 * long int? Was soll denn das für eine Zahl werden? Willst Du die Staatsverschuldung unseres Landes darstellen? ^^ |
|
Nach oben |
|
|
TheMillenium Dark JLI'ler
Anmeldedatum: 21.07.2002 Beiträge: 1427 Wohnort: World Medaillen: Keine
|
Verfasst am: 10.01.2004, 21:59 Titel: Re: ... |
|
|
Mr.X hat Folgendes geschrieben: |
7,2 * 10 hoch 75 (32-bit-REAL) reicht Dir wohl nicht? ^^
|
Wie heißt der Datentyp dann genau, denn ich kenne nur das hier als höchsten Zahlenwert:
Code: | long zahl= 9999999999999999999; |
also ungefähr 10^18
aber ich will mindestens mit so großen Werten rechnen können wie mit meinem normalen Taschenrechner, der bis 10^99 rechnen kann _________________ The source of all power is in its destiny... |
|
Nach oben |
|
|
xardias JLI Master
Alter: 38 Anmeldedatum: 28.12.2003 Beiträge: 804 Wohnort: Palo Alto, CA Medaillen: Keine
|
Verfasst am: 10.01.2004, 22:23 Titel: |
|
|
Also das könnte recht schwer werden. du müsstes deinen eigenen datentyp basteln... und so großze zahlen zu speichern kann eventuell sehr schwer sein (wenn man sie byte für byte lesen/schreiben muss) |
|
Nach oben |
|
|
AFE-GmdG JLI MVP
Alter: 45 Anmeldedatum: 19.07.2002 Beiträge: 1374 Wohnort: Irgendwo im Universum... Medaillen: Keine
|
Verfasst am: 10.01.2004, 23:20 Titel: Re: ... |
|
|
TheMillenium hat Folgendes geschrieben: | aber ich will mindestens mit so großen Werten rechnen können wie mit meinem normalen Taschenrechner, der bis 10^99 rechnen kann | Dazu kannst du ganz normal Double nehmen. Damit kannst du bis ca. 10^300 Rechnen. Wie auch bei jedem Taschenrechner ist dann aber die Genauigkeit in den Extremzahlgebieten dahin. (Du kannst mit einem Taschenrechner z.B. nicht (1.2*10^80) + 1 Ausrechnen, da das Ergebniss immernoch 1.2*10^80 ist...) _________________
CPP: | float o=0.075,h=1.5,T,r,O,l,I;int _,L=80,s=3200;main(){for(;s%L||
(h-=o,T= -2),s;4 -(r=O*O)<(l=I*I)|++ _==L&&write(1,(--s%L?_<(L)?--_
%6:6:7)+\"World! \\n\",1)&&(O=I=l=_=r=0,T+=o /2))O=I*2*O+h,I=l+T-r;} |
|
|
Nach oben |
|
|
TheMillenium Dark JLI'ler
Anmeldedatum: 21.07.2002 Beiträge: 1427 Wohnort: World Medaillen: Keine
|
Verfasst am: 10.01.2004, 23:27 Titel: Re: ... |
|
|
AFE-GmdG hat Folgendes geschrieben: | TheMillenium hat Folgendes geschrieben: | aber ich will mindestens mit so großen Werten rechnen können wie mit meinem normalen Taschenrechner, der bis 10^99 rechnen kann | Dazu kannst du ganz normal Double nehmen. Damit kannst du bis ca. 10^300 Rechnen. Wie auch bei jedem Taschenrechner ist dann aber die Genauigkeit in den Extremzahlgebieten dahin. (Du kannst mit einem Taschenrechner z.B. nicht (1.2*10^80) + 1 Ausrechnen, da das Ergebniss immernoch 1.2*10^80 ist...) |
bei double geht bei mir aber leider auch nur maximal:
Code: | double zahl = 9999999999999999999; |
_________________ The source of all power is in its destiny... |
|
Nach oben |
|
|
AFE-GmdG JLI MVP
Alter: 45 Anmeldedatum: 19.07.2002 Beiträge: 1374 Wohnort: Irgendwo im Universum... Medaillen: Keine
|
Verfasst am: 10.01.2004, 23:46 Titel: |
|
|
richtig, solange du eine genauigkeit von 1 haben willst. Du kannst aber als Double auch speichern Code: | double Zahl=1.0e+34; // entspricht 10000000000000000000000000000000000 |
Aber dann kannst du eben nicht mehr mit einer genauigkeit von 1 rechnen, also wäre dann nicht möglich. _________________
CPP: | float o=0.075,h=1.5,T,r,O,l,I;int _,L=80,s=3200;main(){for(;s%L||
(h-=o,T= -2),s;4 -(r=O*O)<(l=I*I)|++ _==L&&write(1,(--s%L?_<(L)?--_
%6:6:7)+\"World! \\n\",1)&&(O=I=l=_=r=0,T+=o /2))O=I*2*O+h,I=l+T-r;} |
|
|
Nach oben |
|
|
|