Algorithmus für die nte-Wurzel gesucht



  • @Kritiker2000
    Ich gebe zu, bei den meisten Dingen hast Du recht. Meine Bibliothek hat schon Verbesserungsbedarf. Aber auf der anderen Seite, gibt es Eigenschaftswerte zurück, das man von Standarddatentypen nicht erwaten kann. Zum Beispiel, kann man abfragen ob die Zahl gerade, ungerade oder Nachkommastellen enthält.



  • @Kritiker2000
    Mit den ++ und -- Operatoren wollte ich die Zahl mit den kleinstmöglichen Zahl, je nach dem wo sich die kleinste Zahl befindet, addieren / subtrahieren.
    Ich dachte es wäre besser so.

    Ich habe viel Arbeit und Ideen reingesteckt. Soll ich jetzt alles vernichten?



  • Was würdest Du als Namen vorschlagen?



  • Man soll die Operatorüberladung nicht misbrauchen und du tust das. Benutze die Operatoren so wie man sie gewohnt ist und nicht wie du es gerade für sinnvoll hälst. Das verwirrt andere nur.

    Ist doch deine Klasse, wenn du sie nicht so ändern willst, wie die Mehrheit es sich wünscht, dann ist das doch deine Entscheidung.

    Ich persönlich sehe den Sinn hinter deinen Ideen nicht. Wenn ich solch eine Klasse schreiben würde, dann hätte ich
    a) keine Beschränkung der Vor-/Nachkommastellen (höchstens Schrittweiten die eine bessere Performance mit sich bringen)
    b) möglichst gute Performance

    Was hat ein Programmierer denn davon, dass der PC extrem ineffizient rechnet, so wie wir? Ich benutze den PC doch genau dafür, da er es besser kann wie ich.
    Deshalb würde ich eine Basis wie 256 wählen und nicht die 10er Basis.
    Als zugrunde liegende Datenstruktur würde ich mir überlegen ob ich Vorteile von einem std::bitset oder std::vector< bool > hätte, ansonsten ganz normal ein std::vector< uint8_t >, wobei uint8_t ein geeignetes typedef wäre auf einen 8Bit unsigned Typen.
    Wenn es für die Performance keinen Unterschied macht würde ich statt 8Bit pro Byte allgemein 2^(Bits pro Byte) als Basis wählen.

    Nur so ein paar Ideen. Mir ginge es eher um die programmiertechnische Herausforderung bei solch einer Klasse, da ich diese eh nie selber nutzen würde und auf was fertiges (besseres) zurückgreifen würde.



  • Ja, es stimmt. Wenn ich mit mehr als ein Operator rechne beansprucht es sehr viel Zeit. Ich bin nicht gerade ein guter Programmierer, da ich mir alles selbst beigebracht und nicht studiert habe.
    Eine Frage habe ich aber noch. Ein Bool ist ja ein Bit groß. Stimmt es, dass der CPU den Bool-Wert trotzdem Byteweise durchführt? Ich frage nur, weil es mich interessiert, ob ein Bool genauso schnell wie ein Long Integer gelesen wird.



  • Ein "bool" ist in C++ ein Byte groß. Brauch also genauso lange wie
    ein "char", "short", "int" oder "long" in C++ um verarbeitet zu werden.



  • Chuck schrieb:

    Ein "bool" ist in C++ ein Byte groß. Brauch also genauso lange wie
    ein "char", "short", "int" oder "long" in C++ um verarbeitet zu werden.

    Die Größe eines Bools ist nicht so strikt festgelegt um dem Compiler Spielraum zur Optimierung zu geben, so kann er zum Beispiel mehrere Bools in ein einzelnes Byte packen, oder die Wortbreite der Architektur verwenden um die beste performance zu ermöglichen.



  • Wäre aber genauso schnell, wie ein einzelnes "int" zuverarbeiten *Ausrede such*.



  • Ich sehe eine riesen Baustelle vor mir; aber die Arbeit wird sich lohnen. Auf die Idee mit der Basis 256 wäre ich nicht gekommen. Also, wenn ich keine Kopie einer Zahl haben möchte, sollte ich ein Zeiger verwenden? Ich merke ich habe einige Gesichtspunkte ignoriert und muss einiges nachholen.
    Ich könnte vielleicht ANSI-C++ mit Assembler kombinieren, um die Leistung zu optimieren. Ich würde gerne auf Zeichenketten verzichten, aber ich kenne keinen anderen Standarddatentyp, mit dem ich eine große Anzahl an Ziffern an meine Klasse übergeben kann. Ich frage mich, wie die meisten es Schafen, ein Datentyp zu erstellen, bei dem man die Ausführungszeichen weglassen kann. Zum Beispiel bei Datentypen, die länger als double sind.



  • stefan2008 schrieb:

    Ich könnte vielleicht ANSI-C++ mit Assembler kombinieren, um die Leistung zu optimieren.

    Schreib zuerst alles sauber und ordentlich in einer Hochsprache wie C++. Wenn Du später herausfindest, so besonders viel Rechenzeit verbraucht wird, kannst Du Dir immer noch überlegen, diesen kleinen Teil zu optimiern.

    stefan2008 schrieb:

    Also, wenn ich keine Kopie einer Zahl haben möchte, sollte ich ein Zeiger verwenden

    Konstante Referenzen bieten sich eher an.

    stefan2008 schrieb:

    Ich würde gerne auf Zeichenketten verzichten, aber ich kenne keinen anderen Standarddatentyp, mit dem ich eine große Anzahl an Ziffern an meine Klasse übergeben kann.

    Arrays....

    stefan2008 schrieb:

    Ich frage mich, wie die meisten es Schafen, ein Datentyp zu erstellen, bei dem man die Ausführungszeichen weglassen kann. Zum Beispiel bei Datentypen, die länger als double sind.

    Such mal nach "big number class" oder sowas. Da findest du bestimmt shcon fertige Implementierungen, bei denen du Ideen sammeln kannst.



  • Die benutzen zur Eingabe alle Anführungszeichen bzw. unterstützen dies.


Anmelden zum Antworten