Seite 1 von 1

Float verhält sich unerwartet (wie integer?)

Verfasst: Freitag 27. September 2024, 16:52
von Hansi1350
Ich habe schon viel auch in anderen Programmiersprachen mit floats programmiert, aber hier steh ich wohl völlig auf dem Schlauch?
Code:

Code: Alles auswählen

def gatePlausibleCheck(gateA, gateB, pos, scale):
	borderRight = pos + float(scale) * 10 / 2
	borderLeft = pos - float(scale) * 10 / 2
	print("gateA: {0:.9f} borderLeft: {0:.9f}".format(gateA, borderLeft))
	print("{}".format(abs(gateA - borderLeft) < 1.0E-06))
	print("{}".format(abs(gateA - borderLeft)))
	print("{}".format(gateA - borderLeft))
	print("{}".format(1.0E-06))
Ausgabe:

Code: Alles auswählen

gateA: -0.004450000 borderLeft: -0.004450000
False
4.999999999999796e-06
-4.999999999999796e-06
1e-06
Da muss doch 0, oder nahe 0 rauskommen.

Re: Float verhält sich unerwartet (wie integer?)

Verfasst: Freitag 27. September 2024, 17:49
von Hansi1350
Wow, bin ich da über etwas gestolpert:
Code:

Code: Alles auswählen

def gatePlausibleCheck(gateA, gateB, pos, scale):
	borderRight = pos + float(scale) * 10 / 2
	borderLeft = pos - float(scale) * 10 / 2
	print("gateA: {0:.9f} borderLeft: {0:.9f}".format(gateA, borderLeft))
	print("{0:.9f}".format(gateA))
	print("{0:.9f}".format(borderLeft))
Ausgabe:

Code: Alles auswählen

gateA: -0.004450000 borderLeft: -0.004450000
-0.004450000
-0.004445000
Ist das ein bug? Ich sehe hier keinen Fehler meinerseits.

Re: Float verhält sich unerwartet (wie integer?)

Verfasst: Freitag 27. September 2024, 18:27
von Dennis89
Hallo,

4.9e-06 (=0.0000049) ist doch Nahe 0. Schau dir doch mal die zwei Zahlen die du verrechnest vollständig an und nicht auf ein paar Stellen reduziert.

Grüße
Dennis

Re: Float verhält sich unerwartet (wie integer?)

Verfasst: Freitag 27. September 2024, 18:44
von sparrow
@Hansi1350: Und du solltest ein Beispiel zeigen, in dem die Werte klar sind. Dann kann man die bei dem Verständnis helfen.

Re: Float verhält sich unerwartet (wie integer?)

Verfasst: Freitag 27. September 2024, 18:47
von __blackjack__
@Hansi1350: Was ist denn `scale` für ein Datentyp? Ist der `float()`-Aufruf da wirklich nötig?

Re: Float verhält sich unerwartet (wie integer?)

Verfasst: Freitag 27. September 2024, 20:20
von DeaD_EyE
Du bist wahrscheinlich über eine Wissenslücke gestolpert: https://0.30000000000000004.com/
Außerdem verschweigst du gateA, gateB und scale. Was sind die Eingangswerte?

Re: Float verhält sich unerwartet (wie integer?)

Verfasst: Freitag 27. September 2024, 22:21
von Hansi1350
Schaut mal in meinem 2. Post, da sieht man, wenn man genauer hinschaut (vorsicht mit den nullen), das die selbe variable, mit derselben formatierung, unterschiedliche werte ausgibt.

Re: Float verhält sich unerwartet (wie integer?)

Verfasst: Freitag 27. September 2024, 22:22
von Hansi1350
__blackjack__ hat geschrieben: Freitag 27. September 2024, 18:47 @Hansi1350: Was ist denn `scale` für ein Datentyp? Ist der `float()`-Aufruf da wirklich nötig?
Nein, ich habe nur in meiner Ratlosigkeit irgendwas probiert.

Re: Float verhält sich unerwartet (wie integer?)

Verfasst: Freitag 27. September 2024, 22:50
von juwido
Hier wird der Wert "gateA" doppelt angezeigt.

Code: Alles auswählen

print("gateA: {0:.9f} borderLeft: {0:.9f}".format(gateA, borderLeft))
                                   X
print("gateA: {0:.9f} borderLeft: {1:.9f}".format(gateA, borderLeft)) 


Re: Float verhält sich unerwartet (wie integer?)

Verfasst: Samstag 28. September 2024, 06:12
von __blackjack__
Hier das Problem noch mal eingedampft und mit Zeichenketten, denn das hat mit dem Datentyp überhaupt nichts zu tun:

Code: Alles auswählen

In [18]: "{0} {0}".format("spam", "parrot")
Out[18]: 'spam spam'