beliebig großer zahlen wert



  • bastle dir doch einen zahlentyp als klasse, aber ich würde vom klassischen zahlendesign abweichen, weiß zwar nicht wie aber ich würds tun 🕶



  • BigNat - Klasse zur Darstellung großer Zahlen mit Addition, Subtraktion, Multiplikation und Division – sehr naive Implementierung:

    http://turing.fh-landshut.de/~jamann/BigNat.zip



  • hat sogar nen primzahlentest dabei 😉

    wirst aber feststellen das du an der klasse noch kräftig arbeiten musst um den Wettbewerb zu gewinnen 😉



  • Klasse basteln ist gut, einfacher ist es schon etwas fertiges zu nutzen: z.B.
    http://www.swox.com/gmp/

    Einen nativen Datentyp, der sich für diese Problemstellungen eignet, C++ nicht. Die größten ganzzahligen Typen in C++ haben üblicherweise 2^64 Bit, was in etwa 20 Dezimalstellen entspricht (also weit weniger als bei Primzahlsuchen üblich).



  • Bastel dir halt long-Arrays, oder unsigned long Arrays, des is auch recht nett, damit kannste mit ner Klasse auch ganz gut arbeiten, dann noch Operatoren überladen und du hast eigentlich keinen Stress mehr, musste halt dann so mit "High-Byte" und "Low-Byte" -mäßigen Verfahren arbeiten



  • thanks a lot

    danke für die beide adressen.
    wenn c++ anscheinend dafür nicht so gut geeignet ist was kann man dann noch nehmen?
    hab von nem bekannten gehört das man dazu wohl assembler benutzen könnte oder ähnliches ist das richtig ergibt das einen sinn?



  • Bitte sagen wenn das scheisse ist, oder bestätigen wenns stimmt (ich steige grade in Assembler ein): Der Prozessor hat einen bestimmten Befehlssatz, so kann z.B. ein 32 bit Prozessor direkt 32bit Zahlen schnell addieren (kleinere auch, aber laut Hersteller sind Operationen mit kleineren oft langsamer). D.h. wenn du das in Assembler schreiben willst müsstest du auch erst eine Implementierung schreiben um mit so großen Zahlen zu arbeiten. Da kannst du aber die Register auslesen, also wären Additionen und so kein Problem weil da Status-Flags beim Übertrag gesetzt werden.
    Plub blup...



  • jo, musst halt im Normalfall so was machen

    mov a,r1
    add a,r2
    jc hoch
    mov r1,a
    
    hoch: add r2,a
    

    also so prinzipiell



  • wenn c++ anscheinend dafür nicht so gut geeignet ist was kann man dann noch nehmen?

    Im Gegenteil. C++ ist für sowas sogar sehr gut geeignet. Man kann nämlich ne Klasse schreiben, die mit beliebig großen Zahlen arbeitet und sich trotzdem so verhält wie ein int. Weil man Operatoren überladen kann.
    In den meisten anderen Sprachen, müsstest Du die auch ne Klasse schreiben, die die große Zahl speichert und könntest dann aber nicht grosse_zahl*anderes_grosse_zahl schreiben sondern grosse_zahl.multiplizieren( andere_grosse_zahl).

    Es gibt bestimmt einige Bibliotheken, die diese GroßeZahlen-Klasse fertig haben. Hab da so ein Buch 'Cryptographie in C++', da ist eine drin. Die speichert einen Vektor von integern. Damit ist max_int die Basis der Zahl, die Länge kann beliebig sein. (d.h. eine Stelle der Zahl ist eben nicht 0 bis 9 sonder 0 bis max_int). Obs ne Sprache gibt, die von sich aus mit beliebig große Zahlen arbeiten kann, weiß ich nicht.



  • hab mir mal http://www.swox.com/gmp/ angeschaut.
    ist genau das was ich gesucht habe.
    nur gibts das auch für windows?


Anmelden zum Antworten