Shiften statt multiplizieren?



  • Hallo @ All!

    Folgendes Probem: Ich habe eine Aufgabe bekommen wo ich von einer Gleikommazahl Matisse und exponent berechnen soll und zu ACII konvertieren jetz hab ich folgendes Problem: Wie kann ich zu der Zahl nach den Komma kommen ohne zu Multiplizieren sondern nur mit shifts!

    Ich hoffe mir kann da jemand weiterhelfen!!

    mfg



  • hanni6al schrieb:

    Hallo @ All!

    Folgendes Probem: Ich habe eine Aufgabe bekommen wo ich von einer Gleikommazahl Matisse und exponent berechnen soll und zu ACII konvertieren jetz hab ich folgendes Problem: Wie kann ich zu der Zahl nach den Komma kommen ohne zu Multiplizieren sondern nur mit shifts!

    Ich hoffe mir kann da jemand weiterhelfen!!

    mfg

    Was ist denn noch so erlaubt? Darf man Addieren/Subtrahieren? Oder darf man wild im Speicher rumpfuschen und nicht portable Lösungen erstellen?



  • hanni6al schrieb:

    Hallo @ All!

    Folgendes Probem: Ich habe eine Aufgabe bekommen wo ich von einer Gleikommazahl Matisse und exponent berechnen soll und zu ACII konvertieren jetz hab ich folgendes Problem: Wie kann ich zu der Zahl nach den Komma kommen ohne zu Multiplizieren sondern nur mit shifts!

    Ich hoffe mir kann da jemand weiterhelfen!!

    mfg

    Willst du das aus Performancegründen machen?
    Wenn ja: vergiss es erstmal und sorge dafür, dass du es so hinkriegst und kümmer' dich danach um die Optimierung.
    Bzw schau dir mal an, was dein Compiler daraus an Assemblercode macht, evtl. optimiert er dir eh schon das so hin, wie es am schnellsten ist.



  • Paul Manns schrieb:

    Willst du das aus Performancegründen machen?

    Da er die Aufgabe bekommen hat, will er das wahrscheinlich gar nicht machen... 😉



  • _matze schrieb:

    Paul Manns schrieb:

    Willst du das aus Performancegründen machen?

    Da er die Aufgabe bekommen hat, will er das wahrscheinlich gar nicht machen... 😉

    HAHA sehr witzig! Ich sitze wegen diesen Problem eh erst ein paar Tage rum nur weil ich es nicht machen will! 😡 😡 😡 😡

    Erlaubt ist Addieren und Subtrahieren auch und natürlich auch binär operationen!

    mfg



  • zu ACII konvertieren

    Was meinst du damit eigentlich? (Falls ACII = ASCII sein soll, weiß ich trotzdem nicht was du damit meinst).



  • David_pb schrieb:

    zu ACII konvertieren

    Was meinst du damit eigentlich? (Falls ACII = ASCII sein soll, weiß ich trotzdem nicht was du damit meinst).

    Jep ist ASCII gemeint aber das war nur nebeninformation ich will nur wissen wich ich das mit shiften lösen kann!

    Also ich hab von einer Gleitkommazahl die Matisse berechnet und jetzt möchte ich aus dieser Mantisse wieder die Gleitkommazahl berechnen! Nur wie kann ich das mit shifts lösen?

    mfg



  • hanni6al schrieb:

    Erlaubt ist Addieren und Subtrahieren auch und natürlich auch binär operationen!

    mfg

    Dann sollst Du vermutlich im Speicher rum bitknispeln. Die Aufgabe ist daher eigentlich an sich schon mist, aber nun gut.
    Du solltest Dir z.B. mal diesen Artikel durchlesen. Da steht, wie die binäre Repräsentation von Fließkommazahlen auf gängigen Plattformen aussieht.
    Du kannst auf die einelnen Bits zugreifen indem Du die Addresse einer float-Variable reinterpretierst:

    float var = 3.14159f;
    unsigned long* handle = reinterpret_cast<unsigned long*>(&var);
    //jetzt Bitoperationen auf *handle durchführen
    

    Das ganze geht nur gut, wenn sizeof(unsigned long) == sizeof(float) ist. Außerdem musst Du dabei noch die Endianess beachten.
    Ob das ganze sinnvoll ist, sei mal dahingestellt. Ich persönlich denke, dass Leute, die solche Aufgaben stellen, dringend nochmal eine C++-Schulung besuchen sollten.

    Als Alternative könntest Du evtl. noch eine Multiplikation mittels Addition nachbauen und damit das Komma schieben und casten. Ja nach Anzahl der Iterationen schätze ich allerdings mal, dass das ziemlich ungenau wird.

    PS: Wenn ich hier jetzt für den Vorschlag einen auf den Deckel bekomme, dann zurecht. 😃


Anmelden zum Antworten