<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Klasse für große Zahlen - Erst mal dynamisches Array]]></title><description><![CDATA[<p>Hallo!</p>
<p>Ich möchte eine Klasse für (unendlich) große Zahlen implementieren, und will dabei nicht std::vector oder ähnlich verwenden, sondern das dynamsiche Array selbst basteln.</p>
<p>Mein Problem: Was ist wenn ich nun ein Element vorne dranhängen/wegnehmen möchte (sprich ich multipliziere das ganze mit bsp. 255 und bekomme dann ein neues byte vorne (es soll ein uchar array werden) ).<br />
Eine Idee wäre es zu machen wie realloc() von C: Ich kopiere das komplette Array in ein Temp-Array, alloziere Speicher für ein Array mit einem zusätzlichen Byte und schreib dann das Temp-Array in das größere Array, lösche dann das alte. Nur ist das nicht sehr effizient, und wenn ich häufiger Multiplikationen verwenden will, wirds happig (Beispiel: Exponenten benutzen, sprich pow() von einem Klassenobjekt).<br />
Also dachte ich da an eine verkettete Liste, dann kann ich einfach ein zusätzliches Element vorne hinzufügen, indem ich für den next-pointer des vordersten Elements Speicher alloziere. Problem: Das Array wäre furchtbar groß; in einem 32bit System würde ich für eine Struktur in diesem Array 5byte brauchen: 1B für den uchar, 4B für den pointer. Unpraktisch! Da ist die erste Methode noch besser!</p>
<p>Man bedenke: Ich werde Zahlen benötigen, die eventuell mehr als 50MB oder noch mehr benötigen werden.</p>
<p>Gibt es Alternativen? Sonst werde ich die erste Variante benutzen.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/169974/klasse-für-große-zahlen-erst-mal-dynamisches-array</link><generator>RSS for Node</generator><lastBuildDate>Wed, 16 Sep 2026 23:13:43 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/169974.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 10 Jan 2007 16:22:23 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Klasse für große Zahlen - Erst mal dynamisches Array on Wed, 10 Jan 2007 16:22:23 GMT]]></title><description><![CDATA[<p>Hallo!</p>
<p>Ich möchte eine Klasse für (unendlich) große Zahlen implementieren, und will dabei nicht std::vector oder ähnlich verwenden, sondern das dynamsiche Array selbst basteln.</p>
<p>Mein Problem: Was ist wenn ich nun ein Element vorne dranhängen/wegnehmen möchte (sprich ich multipliziere das ganze mit bsp. 255 und bekomme dann ein neues byte vorne (es soll ein uchar array werden) ).<br />
Eine Idee wäre es zu machen wie realloc() von C: Ich kopiere das komplette Array in ein Temp-Array, alloziere Speicher für ein Array mit einem zusätzlichen Byte und schreib dann das Temp-Array in das größere Array, lösche dann das alte. Nur ist das nicht sehr effizient, und wenn ich häufiger Multiplikationen verwenden will, wirds happig (Beispiel: Exponenten benutzen, sprich pow() von einem Klassenobjekt).<br />
Also dachte ich da an eine verkettete Liste, dann kann ich einfach ein zusätzliches Element vorne hinzufügen, indem ich für den next-pointer des vordersten Elements Speicher alloziere. Problem: Das Array wäre furchtbar groß; in einem 32bit System würde ich für eine Struktur in diesem Array 5byte brauchen: 1B für den uchar, 4B für den pointer. Unpraktisch! Da ist die erste Methode noch besser!</p>
<p>Man bedenke: Ich werde Zahlen benötigen, die eventuell mehr als 50MB oder noch mehr benötigen werden.</p>
<p>Gibt es Alternativen? Sonst werde ich die erste Variante benutzen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1207248</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1207248</guid><dc:creator><![CDATA[ne0r]]></dc:creator><pubDate>Wed, 10 Jan 2007 16:22:23 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse für große Zahlen - Erst mal dynamisches Array on Thu, 11 Jan 2007 10:31:09 GMT]]></title><description><![CDATA[<p>Wenn du das dynamische Array selbst verwalten willst, hast du dir aber einiges vorgenommen.<br />
Ich würde erst einmal die vorhandenen STL-Klassen verwenden (vector, list, deque) und einzeln austesten.</p>
<p>Beim vector kannst du mit resize(x) die Größe vorbestimmen.<br />
Bei der Multiplikation zweier Zahlen kannst du ja im voraus abschätzen, wie groß das Resultat wird.</p>
<p>Es kommt natürlich auch noch darauf an, wieviele große Zahlen du gleichzeitig verwalten willst (da dein System evtl. irgendwann nicht mehr 50MB als einen Speicherblock frei hat).</p>
<p>Mit welcher Zahlenbasis möchtest du denn arbeiten?<br />
Weil eine Dezimal-Ziffer pro Byte wären ziemliche Speicherverschwendung.<br />
Dann würde ich dir empfehlen die Zahlen als BCD zu speichern (also 2 Dezimalzahlen pro Byte).<br />
Evtl. könntest du für BCD direkt die Assembler-Opcodes benutzen (falls du Assembler beherrschst).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1207746</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1207746</guid><dc:creator><![CDATA[Th]]></dc:creator><pubDate>Thu, 11 Jan 2007 10:31:09 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse für große Zahlen - Erst mal dynamisches Array on Thu, 11 Jan 2007 17:27:44 GMT]]></title><description><![CDATA[<p>Also ich brauch die Zahlen nicht zur Ausgabe, also werde ich das 256-System verwenden.</p>
<p>Wie ich die Speicherverwaltung anstelle hab ich eigentlich schon im Kopf. Bei operator- ist es eigentlich nicht notwendig, und da ich bei operator+ maximal ein zusätzliches byte brauche, nehm ich einfach generell ein Objekt mit einem byte mehr als als den größeren der beiden Summanden und lösch dann das eventuelle Null-byte. operator* ist dann ein wiederholtes operator+. operator/ dann wie in der Grundschule: Wie oft geht x in y rein ? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";D"
      alt="😉"
    /> So, alle Grundrechenarten drin. Nicht unbedingt perfekt effizient, aber fürs erste solls genügen.</p>
<p>Ach ja, die Idee mit realloc ist unnötig <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";D"
      alt="😉"
    /> Ich werde niemals ein leeres byte vorne anfügen müssen... (ist mir gerade eingefallen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";D"
      alt="😉"
    /> )</p>
<p>Danke für die Antwort!</p>
<p>(Und sorry für den unnötigen Thread...)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1208143</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1208143</guid><dc:creator><![CDATA[ne0r]]></dc:creator><pubDate>Thu, 11 Jan 2007 17:27:44 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse für große Zahlen - Erst mal dynamisches Array on Thu, 11 Jan 2007 17:31:16 GMT]]></title><description><![CDATA[<p>Ach ja: Was ist BCD?<br />
(Nein, ich beherrsche leider keinen Assembler... )</p>
<p>Und wenn es dich interessiert, wofür ich das brauch: Ich will ein kleines Programm zur Verschlüsselung benutzen.<br />
Hm.. Dabei hab ich eine ganz gute Formel ausgedacht, nur braucht die einen Schlüssel, der mindestens 1byte größer ist als die Hälfte der zu verschlüsselnden Datei. ._. das kann lustig werden...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1208145</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1208145</guid><dc:creator><![CDATA[ne0r]]></dc:creator><pubDate>Thu, 11 Jan 2007 17:31:16 GMT</pubDate></item></channel></rss>