Forum: PC-Programmierung python int to float Representation


von Zo R. (hsch1978)


Lesenswert?

Guten Morgen,

in python habe ich aktuell ein Problem mit der Representation eines int 
Wertes in einen float. Wie kann sowas in python umgesetzt werden?

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Was genau meinst du?
1
>>> x=float(42)
2
>>> type(x)
3
<class 'float'>
4
>>> print(x)
5
42.0

von Zo R. (hsch1978)


Lesenswert?

Danke. Ich hab wohl dann noch ein anderes Problem.

In einer Klasse ist ein Parameter mit dem Typ float.
Wenn ich den Wert auf 1.0 setzte erhalte ich in der python Console den 
Wert decimal representation = 2.350988701644575e-38. Im byte array wird 
der Wert so dargestellt: 00000001

: Bearbeitet durch User
von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Klingt konfus. Bitte bringe ein nachvollziehbares Codebeispiel.

von Zo R. (hsch1978)


Lesenswert?

Das ist etwas komplex das in ein Beispiel zu packen. Ist ein komplexes 
Projekt.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Das hilft aber nichts. Mich dünkt, dass du irgendwas versuchst, was so 
nicht von der Sprache abgedeckt ist.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

In C würde man das "undefined behaviour" nennen …

von Sebastian W. (wangnick)


Lesenswert?

Zo R. schrieb:
> In einer Klasse ist ein Parameter mit dem Typ float.
> Wenn ich den Wert auf 1.0 setzte erhalte ich in der python Console den
> Wert decimal representation = 2.350988701644575e-38. Im byte array wird
> der Wert so dargestellt: 00000001

Wenn du die interne Repräsentation von int(1) als float interpretierst, 
dann könnte dessen decimal representation eventuell dem entsprechen was 
du in der Python Console siehst.

Und wo ist jetzt dein Problem?

LG, Sebastian

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Sebastian W. schrieb:
> Wenn du die interne Repräsentation von int(1) als float interpretierst,
> dann könnte dessen decimal representation eventuell dem entsprechen was
> du in der Python Console siehst.

Sie könnte auch ganz anders sein. :-)

Python benutzt ja int-Objekte, die beliebig große Zahlen abbilden 
können.

von Philipp K. (philipp_k59)


Lesenswert?

Zo R. schrieb:
> Wert decimal representation = 2.350988701644575e-38. Im byte array wird
> der Wert so dargestellt: 00000001

stimmt nicht ganz 2.35xxx ist die float interpretation von 00000001, als 
int wäre es die 1.

also wird das problem im code oder Eingabe erzeugt in dem es falsch 
interpretiert wird.

: Bearbeitet durch User
von Norbert (der_norbert)


Lesenswert?

Nicht das es in irgend einer Form Sinn ergeben würde was du da vor hast…
1
#!/usr/bin/python3
2
3
from struct import pack,unpack
4
5
print(f"native float in native int         {unpack('I', pack('f',1))[0]:032b}")
6
print(f"native float in bigendian int      {unpack('>I', pack('f',1))[0]:032b}")
7
print(f"big endian float in native int     {unpack('I', pack('>f',1))[0]:032b}")
8
print(f"big endian float in bigendian int  {unpack('>I', pack('>f',1))[0]:032b}")
9
10
print(f"native int in native float         {unpack('f', pack('I',1))[0]}")
11
print(f"native int in bigendian float      {unpack('>f', pack('I',1))[0]}")
12
print(f"big endian int in native float     {unpack('f', pack('>I',1))[0]}")
13
print(f"big endian int in bigendian float  {unpack('>f', pack('>I',1))[0]}")
1
native float in native int         00111111100000000000000000000000
2
native float in bigendian int      00000000000000001000000000111111
3
big endian float in native int     00000000000000001000000000111111
4
big endian float in bigendian int  00111111100000000000000000000000
5
native int in native float         1.401298464324817e-45
6
native int in bigendian float      2.350988701644575e-38
7
big endian int in native float     2.350988701644575e-38
8
big endian int in bigendian float  1.401298464324817e-45

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.