Laden...

Rechnen mit unbegrenzt großen Zahlen (Taschenrechner)

Erstellt von Thomas_A vor 12 Jahren Letzter Beitrag vor 12 Jahren 12.603 Views
T
Thomas_A Themenstarter:in
2 Beiträge seit 2012
vor 12 Jahren
Rechnen mit unbegrenzt großen Zahlen (Taschenrechner)

Hallo liebe C#-Gemeinde,

Als Ingenieur-Student bin ich etwas mit C# vertraut, jedoch kein Programmier-Experte.
Für ein Projekt an der Uni benötige ich ein Taschenrechner, der mit Zahlen unbegrenzter Größe rechnen kann (Arithmetik, Potenzieren), zum Beispiel Zahlen mit mehreren Millionen Stellen. Nach meiner Kenntnis ist die Darstellung großer Zahlen mit gängigen Computern bei 2^64 begrenzt (?). Mit größeren Zahlen lässt sich mit den üblichen Rechenbefehlen nicht rechnen. Und hier liegt mein Problem.
Im Netz habe ich hierzu zum Beispiel diesen Rechner für große (und kleine) Zahlen mit hoher Genauigkeit von Arndt Brünner entdeckt.
Der gefällt mir sehr gut.
Jedoch brauche ich einen eigenständigen Quellcode.

Nun meine Fragen an die Informatiker:

  1. Ist ein solcher Taschenrechner für große Zahlen schwierig umzusetzen?
  2. Gibt es vielleicht bereits solch ein Programm oder Quellcode zum Nachsehen oder Herunterladen?
  3. Eigent sich C# gut für dieses Problem?

Ich bedanke mich schon im Voraus für eure Antworten!
Gruß Thomas

1.002 Beiträge seit 2007
vor 12 Jahren

Hallo Thomas A,

herzlich Willkommen auf myCSharp!

Beschäftige dich mal mit der BigInteger-Struktur, die dem .NET-Framework in der Version 4.0 hinzugefügt wurde. Die Größe der Ganzzahlen, mit denen du damit rechnen kannst, ist dabei nur durch den vorhandenen Arbeitsspeicher begrenzt.

m0rius

Mein Blog: blog.mariusschulz.com
Hochwertige Malerarbeiten in Magdeburg und Umgebung: M'Decor, Ihr Maler für Magdeburg

W
872 Beiträge seit 2005
vor 12 Jahren

Schau Dir das mal C#: How Should I Handle Arithmetic with Huge Numbers? an...
Dort findest Du auch Verweise auf Source-Code.

T
25 Beiträge seit 2011
vor 12 Jahren

Hallo,

das ist hier ebenfalls mein erster Beitrag. Ich verfolge bereits seit mehreren Monaten die Beiträge in diesem Forum und bin von der Qualität sehr beeindruckt.

Zum Thema. Es gibt eine sehr gute Bibliothek (Multiple Precision Arithmetic Library) zu großen Zahlen mit folgenden Typen*Integer *Rational *Fließkommazahl

Es handelt sich hierbei um eine C Bibliohtek, die sehr einfach eingebundet werden kann. Die Bibliothek bietet alles, was man zur Umsetzung eines Taschenrechners mit "unendl." großen Zahlen benötigt.

Gruß Thomas

T
Thomas_A Themenstarter:in
2 Beiträge seit 2012
vor 12 Jahren
Grenze durch Arbeitspeicher

Sehr interesant,
Danke für eure Antworten!

Nun kommt mir die Frage auf:
Wenn die Größe der Zahl allein durch den Arbeitsspeicher des verwendeten Rechners abhängt, wie groß könnte dann eine Zahl bei herkömmlichen 4GB / 8GB Arbeitsspeicher dargestellt werden (wie viele Stellen)?
Lässt sich dazu eine Aussage treffen oder eine Berechnung durchführen?

Mit freundlichen Grüßen

1.346 Beiträge seit 2008
vor 12 Jahren

Wenn ich das Ausrechne komme ich auf eine zahl mit 13743895347 Stellen bei einem Verbrauch von 4 GB. Die größte Darstellbare Zahl ist dabei (wenn man vom Speicherplatz für Verwaltung absieht:

Bytes pro GB = 230 = 1073741824
Bytes für 4GB = 4 * 2
30 = 232 = 4294967296
In Bits = 8 * 2
32 = 2^35 = 34359738368

Also ist die Größte darstellbare Zahl = 2^34359738368 - 1

Ich hoffe ich habe mich nirgendwo verrechnet. Was noch sein kann ist, dass die Ansteuerung der Bytes durch einen integer passiert, dass würde die Größe des Speichers auf 4GB begrenzen.

1.002 Beiträge seit 2007
vor 12 Jahren

Hallo Thomas_A,

zusätzlich musst du natürlich bedenken, dass für die Berechnung nicht 100% des Arbeitsspeichers zur Verfügung stehen wird, denn zumindest das Betriebssystem sowie deine Software belegen ja ebenfalls Teile des Arbeitsspeichers.

m0rius

Mein Blog: blog.mariusschulz.com
Hochwertige Malerarbeiten in Magdeburg und Umgebung: M'Decor, Ihr Maler für Magdeburg

1.552 Beiträge seit 2010
vor 12 Jahren

Hallo pdelvo,

die maximale/minimale Zahl hängt davon ab ob das Programm in einem x86 oder x64 Prozess läuft.
Bei x86 kann ein Programm generell nur 2GB an Speicher anfragen, von denen ca 1.5 GB frei ansprechbar sind.
Bei x64 ist es etwas anders, dort können theoretisch 8TB angefragt werden. Jedoch ist dabei zu beachten dass jedem .NET Object "nur" 2 GB an Speicher zugewiesen werden kann.

Zusätzlich ist maximal darstellbare Zahl nicht 2n-1 sondern 2n-1-1, da das erste Bit das Vorzeichen angibt.

Gruß
Michael

Mein Blog
Meine WPF-Druckbibliothek: auf Wordpress, myCSharp

T
25 Beiträge seit 2011
vor 12 Jahren

Hallo,

also, die max. positive Zahl erhälst du

2^(n-1)-1

n := Anzahl der Bits

Die Anzahl der darstelllbaren Stellen im 10er System

log (2^(n-1)-1)

log := 10er Logarithmus

Bei 4 GB Arbeitsspeicher = 2^32 Bits ergibt das

log (2^(2^32-1)-1)

Wolframalpha: [URL=http://www.wolframalpha.com/input/?i=log[10%2C+%282^%282^32-1%29-1%29]]Berechnung[/url], Ergebnis

Bei 4GB Speicher kann eine Zahl mit 109 Zehnerpotenzen abgespeichert werden.
z.B. 10
(10^9)

Gruß, Thomas

49.485 Beiträge seit 2005
vor 12 Jahren

Hallo xxMUROxx,

die maximale/minimale Zahl hängt davon ab ob das Programm in einem x86 oder x64 Prozess läuft.

wegen der genannten Einschränkungen für .NET-Objekte sind die tatsächlichen Unterschiede für die Maximalgröße für ein einzelnes Objekt (1,5GB vs 2GB) nicht besonders drastisch. Anders wird das erst, wenn wir über mehrere große Objekte reden. Dann kann unter x64 - genügend großer Arbeitsspeicher vorausgesetzt - jedes Objekt zwei GB groß werden, unter x86 alle zusammen nur 1,5GB.

Hallo m0rius,

zusätzlich musst du natürlich bedenken, dass für die Berechnung nicht 100% des Arbeitsspeichers zur Verfügung stehen wird, denn zumindest das Betriebssystem sowie deine Software belegen ja ebenfalls Teile des Arbeitsspeichers.

nicht nur dass, sondern vor allem wie er belegt ist (Fragmentierung), denn .NET-Objekte brauchen den Arbeitsspeicher zusammenhängend. Für eine 2GB großes Objekt kommt also nicht nur drauf an, dass die 2GB frei sind, sondern dass die zusammenhängend frei sind. Das bedeutet in der Praxis, dass die Maximalgröße oft deutlich unter den theoretisch möglichen 2GB liegt.

Hallo Thomas_A,

das wurde allerdings alles schon früher besprochen, sowohl im Forum als auch in Netz. Bitte immer erst die Suche benutzten.

herbivore