Seite 1 von 1

Autocast vermeiden?

Verfasst: Freitag 29. Oktober 2004, 20:26
von Magnum
Hallo,
ich habe folgenden Python-Code

Code: Alles auswählen

b = 1
c = 3
a = b/c
print("%f")%a
Es wird 0.000000 ausgegeben.

Wie kann ich erreichen, dass Python nicht a = 0.333333 setzt? Also nicht auf Integer castet. Das obere Codestück beschreibt ein komplizierteres Problem: Die Werte für b und c werden nämlich vorher berechnet und sind ganzzahlig.
Eine Antwort wie: "Schreib doch a = 1.0 / 3.0" hilft mir nicht weiter.

Danke für Eure Antworten.

Grüße
Magnum

Verfasst: Freitag 29. Oktober 2004, 20:29
von mawe
Hi!

Schreib doch: :D

Code: Alles auswählen

a = float(b) / float(c)
Gruß, mawe

Verfasst: Freitag 29. Oktober 2004, 20:51
von Magnum
Hi mawe,
erstmal danke!
Es funktioniert teilweise, d.h. solange bis die die Zahlen b und c nicht zu groß werden. Ich berechne nämlich bei einer Variable die Fakultät, welche rasant steigt.
Muss ich mich damit zufrieden geben das es nicht mit sehr großen Zahlen funktioniert oder gibt es noch eine Lösung?

Magnum

Verfasst: Freitag 29. Oktober 2004, 21:05
von Dookie
Hi Magnum,

vielleicht könntest Du die Formel so umstellen, daß Du keine Division brauchst.
Milan hat mal eine Klasse für Brücher gepostet: http://python.sandtner.org/viewtopic.php?t=475
Die könnte da auch hilfreich sein.


Gruß

Dookie

Verfasst: Freitag 29. Oktober 2004, 21:10
von mawe
Hi!

Es reicht wenn Du nur eine Zahl als float nimmst.

Code: Alles auswählen

3/float(2) # -> 1.5
In deinem Fall könntest Du also die kleinere Zahl in float umwandeln. Die große bleibt dann long.
Oder mit Milan's Klasse, wie Dookie schon vorgeschlagen hat.

Gruß, mawe

Verfasst: Freitag 29. Oktober 2004, 21:12
von Milan
Hi. Anderer Vorschlag, falls die Zahlen (speziell b) nicht abnormal groß sind:

Code: Alles auswählen

erg=a/b+(a % b)/float(b)
Damit sollten dann auch sehr große a gebändigt werden können. Aber sobald a zu groß wird geht das auch in die Hose, da dann das addieren fehlschlägt...

Verfasst: Freitag 29. Oktober 2004, 21:27
von Magnum
mawe hat geschrieben:Hi!

Es reicht wenn Du nur eine Zahl als float nimmst.

Code: Alles auswählen

3/float(2) # -> 1.5
In deinem Fall könntest Du also die kleinere Zahl in float umwandeln. Die große bleibt dann long.
Oder mit Milan's Klasse, wie Dookie schon vorgeschlagen hat.

Gruß, mawe
Das bringt nichts, sobald Python(übrigens auch so in C) float/long teilen muss, wird der Nenner auf float gecastet.

@Dookie
In meinem Fall ist eine Klasse zu verwenden, wie mit Kanonen auf Spatzen zu schießen.

Magnum

Verfasst: Freitag 29. Oktober 2004, 21:40
von Milan
Hi. Erscheint mir aber als logische Alternative, es sei denn du schreibst dir selbst eine Funktion, die schriftliche Division von (a%b)/b beherrscht. a/b kann ja Python selber :wink: ...

Verfasst: Freitag 29. Oktober 2004, 21:57
von Dookie
@ Magnum: wenn die Spatzen groß genug sind ;)
Float und Long sind ja auch Klassen.


Dookie