Variblen mit beliebiger Größe zur mathematischen Verwendung

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Variblen mit beliebiger Grˆfle zur mathematischen Verwendung

    Hallo allerseits!

    Ich brauche eine Variable die Mˆglichst viele Nachkomma stellen unterst¸tzt, das grˆflte was ich da kenne ist Double, die 16 Stellen sind aber definitiv zu wenig.

    Voraussetzung ist, das ich damit alle Rechenarten von Objective C benutzen kann, damit fallen Strings also raus. :P

    Irgendwelche Ideen? ?(

    WhitMan
    Trinkst du eigentlich immer Heizöl zum Frühstück?
  • RE: Variblen mit beliebiger Grˆfle zur mathematischen Verwendung

    ne' long long int oder so. Und dann noch eine, mit der du dir merkst, an welcher stelle das Komma war.
    Oder ne' long double oder ne double double. Du musst einfach mal ein paar kombinieren, vielleicht ergibt sich dann was...

    grufl
    MAX
  • RE: Variblen mit beliebiger Grˆfle zur mathematischen Verwendung

    Moin moin!
    Wieso fallen Strings raus? W‰re zwar langsam und Speicherverschwendung, aber die richtige Lˆsung ist auch nichts anderes als ein Array aus Bytes - die Arithmetik muss man zwar selber programmieren (wenn man nichts fertiges findet - vielleicht hiflt apfloat.org/apfloat/ weiter), aber wirklich schwierig ist das nicht; mit C++ ist es dann auch mˆglich, +, -, *, / und andere Operatoren zu ¸berladen, so dass man mit der eigenen Zahlenklasse wie mit ints oder floats hantieren kann.
  • RE: Variblen mit beliebiger Grˆfle zur mathematischen Verwendung


    ne' long long int oder so. Und dann noch eine, mit der du dir merkst, an welcher stelle das Komma war.
    Oder ne' long double oder ne double double. Du musst einfach mal ein paar kombinieren, vielleicht ergibt sich dann was...


    Eh, wie genau stellst du dir das vor?

    @Holy Zarquon

    Ja, hab ich auch ¸berlegt, nur wo hab ich da einen Ansatz?

    WhitMan
    Trinkst du eigentlich immer Heizöl zum Frühstück?
  • RE: Variblen mit beliebiger Grˆfle zur mathematischen Verwendung

    Falls wirklich keine fertige Lˆsung im Netz zu finden ist, muss man halt selbst ran (wenn man an die Geschwindigkeit der Berechnungen keine grˆfleren Anspr¸che stellt, lassen sich die Grundrechenarten, Fakult‰t und Potenz eigentlich recht einfach realisieren).
    1.: Zahldarstellung festlegen - hierbei sollte man schon bedenken, was man mit den Zahlen machen will (denkbar: Ziffernfolge und Position des Kommas speichern, Vor- und Nachkommastellen getrennt in zwei Array speichern,...
    Als Basis bietet sich 256 an (letztlich geht es ja darum, was der Computer besser verabeitet - und da ist das Zehnersystem nunmal ungeeignet); ein Byte entspricht dann einer Ziffer, eine Zahl ist ein Speicherblock (Array) von Ziffern.
    2: Addition - l‰flt sich am einfachsten bewerkstelligen (hier in an C angelehnten Pseudocode):
    int result;
    int i;
    byte carry = 0;
    for (i = 0; i++; maxDigits) {
    result = carry;
    result += a;
    result += b[i];
    c[i] = result % 256;
    carry = result / 256;
    }
    return c;
    Im Prinzip nichts anderes als schriftliches Addieren nur eben mit einer anderen Basis.
    3.: Subtraktion
    4.: Multiplikation
    .
    .
    .

    Der Vorschlag von Max wird dich wohl nicht weiter bringen: double ist der grˆflte, in C standartm‰flig vorhandene Zahlentyp (bin mir jetzt aber nicht ganz sicher, wie es in Cocoa mit long double aussieht - aber bestenfalls ist damit ein paar Stellen sp‰ter Schluss).
  • RE: Variblen mit beliebiger Grˆfle zur mathematischen Verwendung

    Naja. Sonst kann man doch mit allen mˆglichen Bezeichnungen hantieren. Z.B. gibt es:
    int
    long int
    long long
    unsigned
    unsigned int
    unsigned long
    unsigned long int
    unsigned long long

    Warum soll man das nicht auch anders kombinieren kˆnnen (z.B. mit double, ...)??

    Ansonsten kann man doch auch irgendwie z.B. die grˆfle von Ints festlegen. Findet man in manchen Fundation Headern. Das sieht dann irgendwie so aus: int abcd:1 (also nur ein Bit). Warum soll man das nicht auch mit Doubles machen kˆnnen?? (Wie's genau geht hab ich's mir auch nicht gemerkt, nur so, wie's da sthet geht's nicht ;))

    @ Holy
    Der Code geht aber nicht so, wie du ihn aufgeschrieben hast 8o
    z.B. ist die For-Schleife falsch 8)
    So ganz hab ich ihn noch nicht verstanden, abewr das kommt nocht ;)
    :D

    @ WhitMan
    Wof¸r in aller Welt brauch man so grofle Zahlenbereiche??

    grufl
    MAX
  • RE: Variblen mit beliebiger Grˆfle zur mathematischen Verwendung

    Nein, die for-Schleife ist richtig - habe schliefllich grofl Pseudo-Code dr¸ber geschrieben (muss also auch gar nicht kompilierbar sein :-)
    Der Algorhytmus ist wirklich nichts anderes als schriftliches Addieren (haben bestimmt viele schon verlernt ;-) - nur eben mit Basis 256; % liefert den Rest einer Division, / ist ganz normales teilen (ohne Nachkommastellen, da auf int-Werte angewendet).
  • RE: Variblen mit beliebiger Grˆfle zur mathematischen Verwendung

    Original von Holy Zarquon
    Falls wirklich keine fertige Lˆsung im Netz zu finden ist, muss man halt selbst ran


    F¸r Arithmetik mit groflen Zahlen gibt es massig zB. im Umfeld der Kryptographie hat man fast immer mit sehr groflen Zahlen zu tun und die entsprechenden Routinen sind immer mit dabei (fast ausschliefllich in C und lassen sich sehr einfach nach ObjC "mitnehmen"). Grofle Zahlen sind dabei Zahlen mit mehreren tausend Stellen - falls das ausreicht...

    (allerdings sind die nicht zur Basis 256, dafl m¸flte man selber anpassen...)
    Es gibt genau 10 Sorten von Menschen.
    Die eine kennt das binaere Zahlensystem, die andere nicht.
  • RE: Variblen mit beliebiger Grˆfle zur mathematischen Verwendung

    Aaah... Jetzt hab ich's verstanden ;)
    Ich hab mich ¸ber die 256 gewundert. Doch jetzt...
    Du nimmst also das 256'er System. Hat das vorteile??
    Irgendwann musst du doch eh' ins 10'er zur¸ck!?! ?(

    grufl
    MAX
  • RE: Variblen mit beliebiger Grˆfle zur mathematischen Verwendung

    ja, das ist mir klar. Aber wenn der user z.B. die Zahlen im Dezimalsystem sehen will, dann muss man es doch umrechnen.

    Was mir ncoh eingefallen ist: wir w‰r's mit Potenzen?? also *10^x oder so... (wenn du es nicht so genau brauchst, nur grofl).

    grufl
    MAX
  • hm

    aber wenn du nur mit der basis von 256 rechnest hast du arrays aus chars

    imho sind die heutigen cpus viel besser darin optimiert einen volle addressbreite zu manipulieren

    also würde ich als basis speicher für eine stelle ein int mit 32bit bzw eine long mit 64 bit verwenden

    das hätte den vorteil das du bei den entsprechenden rechenoperationen wirklich immer ganze register belegst

    btw:

    munitions.dotforge.net/dolphin…tion=render&category=0302

    und google mal nach GNU MP edit: [der link bei meinem vorposter zeigt wohl direkt dahin ^^; *lesenbilded* *schwitz*]

    bzw 'multible precision data types'
    snafu
    :() { :|: &};:
    sometimes i dream in hex
    Obey gravity! Because its a law!