bigfloat



  • quasi float bzw double nur halt genauer basierend auf string basis

    ok, also die shifts kann ich in den wind schiessen...
    hab mich auch die ganze zeit gefragt wie ich das machen soll
    letztendlich hab ichs als teilen/multiplizieren mit 2^x geschrieben

    naja modulo würde den nachkomma teil zurückgeben (frac oder so heisst das doch glaub ich?!?)

    von wegen potenz und logarithmus hab ich noch einige probleme, ich weis nnicht ganz wie ich das errechnen soll
    aber hab ich noch nicht so ganz 100%ig damit beschäftigt



  • Sinus
    Cosinus
    Tangens
    und deren Umkehrfunktionen



  • mh ok

    wobei ich das erst im späteren verlauf implementiere



  • Bei den arithmetischen Operatoren kannst du gerade noch die Zuweisungs-Versionen schreiben, also += , -= , *= , /= (je nachdem auch = ). Dekrement- und Inkrementoperatoren wirst du wahrscheinlich eher nicht brauchen.

    Was vielleicht noch praktisch wäre, sind Überladungen der Stream-Operatoren << und >> , damit man diese mit std::istream und std::ostream verwenden kann.



  • ein und ausgabe habe ich noch nicht geschrieben aber vor...
    die normalen operationen (+ - * /) hab ich als memberfunktionen implementiert und die dazugehörigen operatoren ausserhalb der klasse dazu

    ich hab konstruktoren für die normalen build in typen und string und copy Ctor, vergleichs methode habe ich auch, auf diese greifen dann die global überladenen operatoren zu (< > >= == ...)



  • Skym0sh0 schrieb:

    die normalen operationen (+ - * /) hab ich als memberfunktionen implementiert und die dazugehörigen operatoren ausserhalb der klasse dazu

    Also du meinst schon += etc. als Member und + etc. global?

    Skym0sh0 schrieb:

    vergleichs methode habe ich auch, auf diese greifen dann die global überladenen operatoren zu (< > >= == ...)

    Hm, brauchst du die Vergleichsmethoden überhaupt, wenn du die Operatoren hast?



  • Skym0sh0 schrieb:

    quasi float bzw double nur halt genauer basierend auf string basis

    Da float und double integrierte Datentypen und keine Klassen sind würde es mich doch interessieren was Du mit "nur halt genauer meinst"? Vermeidung von Rundgsfehler oder größere Anzahl an Vorkomma- bzw. Nachkommastellen?

    Rationale Zahlen mit großer Genauigkeit sind nicht ganz einfach, aber gut als Klasse zu implementieren. Gleiches gilt für BCD-Zahlen. Spannend ist auch das decfloat Thema: http://www.c-plusplus.net/forum/viewtopic-var-t-is-229658-and-start-is-0-and-postdays-is-0-and-postorder-is-asc-and-highlight-is-.html

    Schreib mal etwas mehr zu Deiner Aufgabenstellung...



  • Ich glaube, er erreicht die zusätzliche Genauigkeit dadurch, dass er die Zahl in einem String speichert (also mehr Stellen). Ein String ist meiner Ansicht nach aber nicht gerade der optimalste Ansatz...



  • Nexus schrieb:

    Skym0sh0 schrieb:

    die normalen operationen (+ - * /) hab ich als memberfunktionen implementiert und die dazugehörigen operatoren ausserhalb der klasse dazu

    Also du meinst schon += etc. als Member und + etc. global?

    += *= ... sind als member implementiert und + - * / sind global

    Nexus schrieb:

    Skym0sh0 schrieb:

    vergleichs methode habe ich auch, auf diese greifen dann die global überladenen operatoren zu (< > >= == ...)

    Hm, brauchst du die Vergleichsmethoden überhaupt, wenn du die Operatoren hast?

    ich greife in der operator definition auf die verlgeichs methode zu
    so muss ich die datenkapselung nicht per friend umgehen

    Nexus schrieb:

    Ich glaube, er erreicht die zusätzliche Genauigkeit dadurch, dass er die Zahl in einem String speichert (also mehr Stellen). Ein String ist meiner Ansicht nach aber nicht gerade der optimalste Ansatz...

    jop, per string...
    ich probier erstmal nur was rum, ich hab sonst keine richtige aufgabe (als 17 jähriger ;))



  • Skym0sh0 schrieb:

    ich probier erstmal nur was rum, ich hab sonst keine richtige aufgabe (als 17 jähriger ;))

    Ja, solche Sachen können manchmal ganz spannend sein. Vielleicht kannst du dich bei Gelegenheit auch an einer Bruch-Klasse versuchen, hab ich auch mal gemacht... 😉



  • ich auch, ist aber schon länger her 😉



  • mh

    ich hab bei der eingabe jetzt es so gemacht dass alle zeichen die nicht gültig sind (also buchstaben und sonderzeichen) einfach ignoriert werden und aus dem string gekickt werden

    wenn aber nur ein buchstabe zum beispiel eingeben wurde, was soll ich dann machen?
    per exit das programm abbrechen, eine exception werfen, die zahl auf 0 setzen?



  • mach's wie beim int.



  • failbit setzen?

    mh geht schlecht glaub ich

    ich hab einen Ctor der einen string bekommt und den dann so bearbeitet dass man bequem und gut meine zahl rausbekommt (sprich alle falschen zeichen löscht, 2. komma löscht und sowas alles)

    mh wie würde ich das denn setzen können?



  • Skym0sh0 schrieb:

    ich hab einen Ctor der einen string bekommt

    oh.
    exception ist am saubersten.
    zahl auf 0 setzen geht zur not auch.
    buchstaben ignorieren läßt fehler unerkannt und ist böse.
    exit ist am verbotensten.



  • mit ignorieren meine ich dass der buchstabe gelöscht wird, also nicht in den finalen sauberen string kommt



  • Was ist bei Dir eine "grosse Gleitkommazahl"? Der Datentyp long double bietet je nach Compiler 60 oder mehr bit und reicht für mindestens 17 signifikante Stellen. Wenn dies genügt, braucht man keine eigene Klasse, C/C++ macht dann alles und hält geeigenete Funktionen bereit. Wer braucht schon mehr als 17 signifikante Stellen?



  • es ist eine gute übung wie ich finde...

    ausserdem, rechne mal mit standart c++ mitteln die 100ste stelle von pi aus...

    aber dass man grosse zahlen mit standart c++ mitteln errechnen kann, das wäre mir neu

    BCD ist extern, boost auch, was anderes fällt mir nicht wirklich ein, aber es sind alles externe bibliotheken nix internes

    ok, denke ich werfe eine exception (ob der user die fängt ist ihm überlassen) und setze die zahl auf 0



  • Skym0sh0 schrieb:

    es ist eine gute übung wie ich finde...

    finde ich auch.
    aber ich würde nur ne klasse für natürliche zahlen machen. aus der dann eine für ganze machen und dann vielleicht fließkommazahlen. innendrin gerechnet wird aber nur auf ganzen zahlen. vielleicht. hab's noch nicht gemacht, bin nicht sicher.

    Skym0sh0 schrieb:

    ausserdem, rechne mal mit stan**** c++ mitteln die 100ste stelle von pi aus...

    das ist ein sehr kleines problem:
    http://www.ellrich-net.de/Pispigot.htm

    [/quote]ok, denke ich werfe eine exception (ob der user die fängt ist ihm überlassen) und setze die zahl auf 0[/quote]
    ja, mach das.
    aber wundere dich nicht über die warnung des compilers, daß er den code unterhalb von throw nicht ausführen will. 🤡



  • Wer solche extreme Dinge vorhat, kommt um die Schaffung eines eigenen Datentyps bigfloat nicht herum. Ist aber mehr als eine blosse Übungsaufgabe! Floats sind intern float=mantisse*pow(2,Exponent). Das entscheidende ist die Mantisse, die auf 2 (oder mehr) Werte aufgeteilt werden muss. Kann mir vorstellen, dass es sowas schon gibt.


Anmelden zum Antworten