Real/Float in Hex/Dez wandeln
roger
- perl
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
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
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
你好 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";
再见,
克里斯蒂安
Naja, pack/unpack:
ok, damit stehe ich auf Kriegsfuss.
Struppi.
你好 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.
再见,
克里斯蒂安
Hallo,
danke meine Herrn... ganz einfach. Auf die Idee mit pack/unpack
wäre ich nicht gekommen.
Gruß
roger
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.
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
Naja, pack/unpack:
ok, damit stehe ich auf Kriegsfuss.
Na, dann pack() das mal an ;-)
Hotti
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.
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.
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