roger: Real/Float in Hex/Dez wandeln

Hallo,

ich möchte von einer "Kommazahl" welche aus Basis und Mantisse besteht,
den eigentlichen Dezimalwert erzeugen. Den Wert der tatsächlich in der Speicherstelle steht.

Mit C schreibe ich in eine Float Variable und lese die Adresse in Long aus.
Wie könnte ich es in Perl realisieren.

Gruß
     roger

  1. ich möchte von einer "Kommazahl" welche aus Basis und Mantisse besteht,

    Du möchtest eine Zahl. die du im programmtext als 1.4e-17 angegeben hast

    den eigentlichen Dezimalwert erzeugen. Den Wert der tatsächlich in der Speicherstelle steht.
    Mit C schreibe ich in eine Float Variable und lese die Adresse in Long aus.
    Wie könnte ich es in Perl realisieren.

    Alles was ich von dir verstehe, gemahnt mich an dies:
    sprintf("%.12f",1.474238e-3)

    mfg Beat

    --
    ><o(((°>           ><o(((°>
       <°)))o><                     ><o(((°>o
    Der Valigator leibt diese Fische
    1. Morgen Beat,

      nicht ganz.

      z.B.

      Float ist ja nur ein Format wie die Zahl dargestellt wird. In Wirklichkeit steht in der Ram Speicherzelle ja keine Kommazahl sondern eine Ganzzahl.
      Genau diese Ganzzahl möchte ich haben.

      z.B.

      Float 123.4 => Long 112347541 (das steht in der Speicherzelle.. in Binär)
      Float 0.1 => Long 1036831949
      Float 10.0 => Long 1092616192

      Gruß
           roger

      1. 你好 roger,

        Float ist ja nur ein Format wie die Zahl dargestellt wird. In Wirklichkeit steht in der Ram Speicherzelle ja keine Kommazahl sondern eine Ganzzahl.
        Genau diese Ganzzahl möchte ich haben.

        z.B.

        Float 123.4 => Long 112347541 (das steht in der Speicherzelle.. in Binär)
        Float 0.1 => Long 1036831949
        Float 10.0 => Long 1092616192

        Naja, pack/unpack:

          
        print unpack("i",pack("f",.1)),"\n";  
        
        

        再见,
         克里斯蒂安

        --
        http://wwwtech.de/
        Unsere Vorstellungen von der Ewigkeit sind genauso nuetlich wie die Mutmassungen eines Kuekens ueber die Aussenwelt bevor es die Eierschale aufbricht.
        Kompromisse und andere WiderlichkeitenHochzeit mit Flitterwochen
        1. Naja, pack/unpack:

          ok, damit stehe ich auf Kriegsfuss.

          Struppi.

          1. 你好 Struppi,

            Naja, pack/unpack:

            ok, damit stehe ich auf Kriegsfuss.

            Pack gibt dir die binäre Repräsentation eines Datums, unpack wandelt es wieder in einen Perl-Datentyp um. Mehr steckt da eigentlich nicht hinter.

            Du kommst ja so ohne weiteres gar nicht an die binäre Repräsentation bei dem Abstraktionsgrad.

            再见,
             克里斯蒂安

            1. Hallo,

              danke meine Herrn... ganz einfach. Auf die Idee mit pack/unpack
              wäre ich nicht gekommen.

              Gruß
                   roger

              1. Hallo,

                danke meine Herrn... ganz einfach. Auf die Idee mit pack/unpack
                wäre ich nicht gekommen.

                Und ich hab nochne Idee, betr. Socket und Deinem c-Programm:

                Trenne konsequent Handle und Darstellung. D.h., Dein c-Program schreibt nur einen Bitstream in das socket, allenfalls ein unescaped Hexmap.

                HexMap mit Escape

                Bitstream ist zu bevorzugen, dafür ist ein socket auch gedacht. Alle Zeitserver schicken z.B. Binaries. Hexmap braucht doppelt soviel Bandbreite, das gilt für alles, was Du auf Darstellungsebene schickst (Zeichen).

                Mein Vorschlag: Überlasse die Darstellung dem, der das socket liest, da schreibst Du Dein c-Programm nur einmal und bist flexibel.

                Hotti

          2. Naja, pack/unpack:

            ok, damit stehe ich auf Kriegsfuss.

            Na, dann pack() das mal an ;-)

            Hotti

            --
            Wenn Du Deine Feinde nicht lieben kannst, lerne sie schätzen.
      2. Float ist ja nur ein Format wie die Zahl dargestellt wird. In Wirklichkeit steht in der Ram Speicherzelle ja keine Kommazahl sondern eine Ganzzahl.
        Genau diese Ganzzahl möchte ich haben.

        Nein da kommst du nicht dran.

        Allerdings kann ich mir vorstellen, dass es unter Devel::____ Module gibt, die auch diese Werte auslesen können.

        Struppi.

  2. ich möchte von einer "Kommazahl" welche aus Basis und Mantisse besteht,
    den eigentlichen Dezimalwert erzeugen. Den Wert der tatsächlich in der Speicherstelle steht.

    Heißt das, du hast die binäre Umsetzung einer Gleitkommazahl? Also eine Bytefolge?
    Dann musst du das irgendwo umrechnen.

    Mit C schreibe ich in eine Float Variable und lese die Adresse in Long aus.
    Wie könnte ich es in Perl realisieren.

    Nur mit einer entsprechenden Methode.

    Struppi.

  3. hi,

    Mit C schreibe ich in eine Float Variable und lese die Adresse in Long aus.
    Wie könnte ich es in Perl realisieren.

    Für Beides und die Aufgabenstellung in Deinem post von vor ein paar Tagen, hätte ich noch eine gänzlich andere Lösung, die ist jedoch nicht so für die Öffentlichkeit bestimmt, bei Interesse schreib mich einfach an.

    Rolf

    --
    Schätzen ist das Gegenteil von Unterschätzen.