WinFuture-Forum.de: Extrem Große Variable - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
  • 2 Seiten +
  • 1
  • 2

Extrem Große Variable


#1 _USA_

  • Gruppe: Gäste

  geschrieben 01. Mai 2007 - 15:29

Hi, ich programmiere hier in C++
Mein Problem ist, dass eine int Variable bzw. ein Double nicht sehr viele Stellen speichern kann.
Ich brauch ne Variable, die bis zu 11 Million-stellige Ganzzahlen speichern kann und eine, die bis zu 11 Million-stellige Kommazahlen speichern kann. (Also 11 Millionen Stellen vor dem Komma, und mind. 10 dahinter.)

Wie kann ich des möglichst geschickt und ohne großen Aufwand anstellen?

PS: Es wäre auch schon hilfreich, wenn es ein Variable gäbe, die ein bischen größer als int und double ist. Muss nicht gleich des volle Programm sein. :wink:

Dieser Beitrag wurde von USA bearbeitet: 01. Mai 2007 - 19:17

0

Anzeige



#2 Mitglied ist offline   DonElTomato 

  • Gruppe: aktive Mitglieder
  • Beiträge: 311
  • Beigetreten: 04. Oktober 05
  • Reputation: 0

geschrieben 01. Mai 2007 - 19:57

Spontan fallen mir u-Variablen ein. Bedeutet wenn du keine negativen Zahlen erwartets kannst du statt int uint verwenden. Diese Variable untersützt keine negativen Zahlen, erweitert aber den Bereich der positiven Zahlen um die Spanne des negativen Bereichs.

ushort, ulong etc. müsste es in C++ wohl geben.

ein ulong geht z.B. bis 18.446.744.073.709.551.615
0

#3 Mitglied ist offline   Kenny 

  • Gruppe: aktive Mitglieder
  • Beiträge: 2.430
  • Beigetreten: 22. September 03
  • Reputation: 13

geschrieben 01. Mai 2007 - 20:03

hm mal ne dumme frage nebenbei... zahlen mit 11millionen stellen? was hast du vor?
ne so große zahl begegnet normal nur chuck norris beim zählen (2mal^^)
"Irgendwat is ja immer."
0

#4 _USA_

  • Gruppe: Gäste

geschrieben 01. Mai 2007 - 20:17

@DonElTomato: u Variablen gibts zwar nicht, aber man kann unsigned davor schreiben. Bewirkt das, was du beschrieben hast. Danke für die Idee, ich bin da nicht draufgekommen.

EDIT: Komisch, irgendwie spinnt mein Programm, wenn ich unsigned int und unsigned double nehm. :D

@Kenny: Es geht dabei um Primzahlen^^ http://www.primzahle...ex.htm#12092006

Hab auch schon gegooglet, und diese Seite gefunden http://www.wer-weiss...cle1413162.html
aber der Link in der ersten Antwort funzt nicht. Aber ich glaub das in der ersten Antwort beschriebene ist gar nicht so falsch, oder?
Man kann ja auch char Variablen ein ganzes Wort zuordnen, auf diese Weise müsste des doch auch funktionieren, oder? ^^

Dieser Beitrag wurde von USA bearbeitet: 01. Mai 2007 - 20:30

0

#5 Mitglied ist offline   Witi 

  • Gruppe: aktive Mitglieder
  • Beiträge: 5.947
  • Beigetreten: 13. Dezember 04
  • Reputation: 43
  • Geschlecht:Männlich
  • Wohnort:Kingsvillage
  • Interessen:Frickeln

geschrieben 01. Mai 2007 - 20:33

Es gibt in einigen Sprachen, wie Java oder C# Klassen die nennen sich BigInteger. Damit kannst du mit so großen Zahlen hantieren, wie Ressourcen (RAM, Swap...) auf dem Computer zur Verfügung stehen.

Sie basieren auf Arrays. Nachdem Motto, hat ein Datentyp seinen maximalen Wert erreicht, wird einfach ins nächste Feld des Arrays geschrieben...
0

#6 Mitglied ist offline   DonElTomato 

  • Gruppe: aktive Mitglieder
  • Beiträge: 311
  • Beigetreten: 04. Oktober 05
  • Reputation: 0

geschrieben 01. Mai 2007 - 21:19

Beitrag anzeigenZitat (eber007: 01.05.2007, 21:17)

@DonElTomato: u Variablen gibts zwar nicht, aber man kann unsigned davor schreiben. Bewirkt das, was du beschrieben hast. Danke für die Idee, ich bin da nicht draufgekommen.



Jaja, hab mich halt in "spät abendlicher" Manier ausgedrückt ;-) . Bzw. ich kenn nur "uint" etc. anstatt "unsigned int" da ich mit C++ nicht viel am Hut habe.
0

#7 Mitglied ist offline   MNG 

  • Gruppe: aktive Mitglieder
  • Beiträge: 293
  • Beigetreten: 29. März 06
  • Reputation: 0

geschrieben 01. Mai 2007 - 22:19

Hatte mir mal selber sowas geschrieben (und dabei auf String zurückgegriffen - ineffizient, aber lief). Mittlerweile hat jemand sich aber mal die Mühe gemacht:
https://sourceforge....cts/cpp-bigint/
0

#8 _USA_

  • Gruppe: Gäste

geschrieben 02. Mai 2007 - 21:31

@Witi: Ja, genau sowas bräuchte ich. Und was in C# geht, geht ja auch in C++.
Google hat mir mal wieder nicht weitergeholfen, jemand ne Idee, wie ich das anstellen kann?
0

#9 Mitglied ist offline   DonElTomato 

  • Gruppe: aktive Mitglieder
  • Beiträge: 311
  • Beigetreten: 04. Oktober 05
  • Reputation: 0

geschrieben 03. Mai 2007 - 07:50

Beitrag anzeigenZitat (eber007: 02.05.2007, 22:31)

Und was in C# geht, geht ja auch in C++.


Mhh, da wäre ich mir nicht so sicher. Wenn alles was in C# ginge auch in C++ gehen würde dann gäbs C# nicht weils ja keine Vorteile bringen würde, ok schon ein paar, aber pauschal sagen kann man das nicht.

Möglich wäre das es ein equivalent gibt.
0

#10 Mitglied ist offline   ifelse 

  • Gruppe: Mitglieder
  • Beiträge: 2
  • Beigetreten: 03. Mai 07
  • Reputation: 0

geschrieben 03. Mai 2007 - 20:29

int main()
{
	long int deinevar = 2147483647;
	system("PAUSE");
	return 0;
}

Das ist der größte integer Wert, den ich bei c++ kenne.

Dieser Beitrag wurde von ifelse bearbeitet: 03. Mai 2007 - 20:56

0

#11 Mitglied ist offline   Witi 

  • Gruppe: aktive Mitglieder
  • Beiträge: 5.947
  • Beigetreten: 13. Dezember 04
  • Reputation: 43
  • Geschlecht:Männlich
  • Wohnort:Kingsvillage
  • Interessen:Frickeln

geschrieben 04. Mai 2007 - 06:56

@eber007 Was ist denn mit dem Link den MNG gepostet hat?
0

#12 Mitglied ist offline   ThugMasta 

  • Gruppe: Mitglieder
  • Beiträge: 8
  • Beigetreten: 08. Mai 07
  • Reputation: 0

geschrieben 08. Mai 2007 - 04:45

also ein int hat immer die größe eines maschienenwortes auf dem jeweiligen Rechnersystem zb. Pentium 4 = 32bit, Pentium 2 Duo = 64 Bit. Das heist ein int(2³²=4bit) auf einem 32 bit Rechner kann einen 10 stelligen Zahlenbereich darstellen, ein int(8bit) auf einem 64 bit Rechner einen 19 stelligen Zahlenberich. Auf einem 32 bit rechner kann man mit dem Datentyp "long long" oder bei älteren Compilern "__int64" auch so einen 8bit Datentyp erzeugen.

int zahl1;
//bei neueren Compilern
long long zahl2;
//bei älteren Compilern
__int64 zahl3;

cout << "Groesse von int:\t" << sizeof(zahl1) << "bit" << endl;
cout << "Groesse von long long:\t" << sizeof(zahl2) << "bit" << endl;
cout << "Groesse von __int64:\t" << sizeof(zahl3) << "bit" << endl;


Kurz gesagt es ist (bis jetzt) unmöglich eine Zahl mit 11 millionen Stellen in eine Variable eines Basisdatentyps zu legen, aber warum sollte man mit mehr als ca. 9,2 Trillionen rechnen? 11 millionen Stellen sind (ohne scheiß) über "12 Miliamiliaseszentquattuortriginmiliaseptingentsexv
igintillionen" ich hab angst vor solchen Zahlen, aber mal ehrlich das ist doch ne verarsche selbst wenn du so eine Zahl in eine Klasse oder sonst was bekommst was willst du dann damit? Sie dir auf deinem Bildschirm ausgeben und taaaaaaaaaaaaaaaaaaaaaaaaaaaaagelang Zahlen lesen? Ich glaub Telefonbücher abschreiben macht mehr spass. :blink:
0

#13 Mitglied ist offline   Witi 

  • Gruppe: aktive Mitglieder
  • Beiträge: 5.947
  • Beigetreten: 13. Dezember 04
  • Reputation: 43
  • Geschlecht:Männlich
  • Wohnort:Kingsvillage
  • Interessen:Frickeln

geschrieben 08. Mai 2007 - 06:22

Hallo und Willkommen im Forum, ThugMasta.

Zitat

zb. Pentium 4 = 32bit, Pentium 2 Duo = 64 Bit

Das ist so nicht ganz richtig. Du vergisst noch eine entscheidene Sache: das Betriebssystem. Ohne ein 64 Bit OS wirst du den größeren 64 Bit Datentyp nicht ausnutzen können.

Zitat

Kurz gesagt es ist (bis jetzt) unmöglich eine Zahl mit 11 millionen Stellen in eine Variable eines Basisdatentyps zu legen

Auch nicht 100% richtig. Der größte Datentyp in z.B. C ist wie du schon richtig sagst, (u)long bzw. long long. Das hindert dich trotzdem nicht daran dir eigene Datentypen zu erstellen um mit größere Zahlen rechnen zu können.

Wie schon erwähnt ist das bekannteste Beispiel dafür BigInteger, den einige Sprache wie Ruby oder Java bereits mitbringen.

Außerdem...nun rat mal wie die Leute PI auf aber Millionen Stellen ausrechnen? :blink:
0

#14 Mitglied ist offline   Der Kenner 

  • Gruppe: aktive Mitglieder
  • Beiträge: 574
  • Beigetreten: 30. Januar 05
  • Reputation: 0

geschrieben 08. Mai 2007 - 21:56

Zitat

ich hab angst vor solchen Zahlen, aber mal ehrlich das ist doch ne verarsche selbst wenn du so eine Zahl in eine Klasse oder sonst was bekommst was willst du dann damit?

Der spekuliert auf die 100.000$ ^_^
0

#15 Mitglied ist offline   ThugMasta 

  • Gruppe: Mitglieder
  • Beiträge: 8
  • Beigetreten: 08. Mai 07
  • Reputation: 0

geschrieben 09. Mai 2007 - 01:09

Zitat

Du vergisst noch eine entscheidene Sache: das Betriebssystem. Ohne ein 64 Bit OS wirst du den größeren 64 Bit Datentyp nicht ausnutzen können.

Ja, du hast recht natürlich ist auch das Betriebssystem entscheidend, aber ausnutzen kann man den 64 bit Datentyp trotzdem (wie schon beschrieben).

Zitat

Zitat

Kurz gesagt es ist (bis jetzt) unmöglich eine Zahl mit 11 millionen Stellen in eine Variable eines Basisdatentyps zu legen

Auch nicht 100% richtig. Der größte Datentyp in z.B. C ist wie du schon richtig sagst, (u)long bzw. long long. Das hindert dich trotzdem nicht daran dir eigene Datentypen zu erstellen um mit größere Zahlen rechnen zu können.
Wie schon erwähnt ist das bekannteste Beispiel dafür BigInteger, den einige Sprache wie Ruby oder Java bereits mitbringen.

Ich denke das ist schon richtig so denn die rede war von Basisdatentypen, es mag so etwas wie ein BigInteger geben aber ich glaube eher, wie auch schon von anderen gesagt, das es eher eine Klasse ist in der Arrays verwendet werden um solche riesigen Zahlen zu speichern und nicht ein Basisdatentyp von Ruby oder Java.

Und wegen der Pi Sache, ich glaube der Rechner auf dem diese Zahl mit millionen von Stellen liegt ist mit einem HomePC nicht vergleichbar, was ich meine ist ob es sowas gibt oder nicht die Frage hier zu stellen ist verarsche. ^_^
0

Thema verteilen:


  • 2 Seiten +
  • 1
  • 2

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0