Autocast vermeiden?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Magnum
User
Beiträge: 3
Registriert: Freitag 29. Oktober 2004, 20:22

Autocast vermeiden?

Beitragvon Magnum » Freitag 29. Oktober 2004, 20:26

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
Zuletzt geändert von Magnum am Freitag 29. Oktober 2004, 20:46, insgesamt 1-mal geändert.
mawe
Python-Forum Veteran
Beiträge: 1209
Registriert: Montag 29. September 2003, 17:18
Wohnort: Purkersdorf (bei Wien [Austria])

Beitragvon mawe » Freitag 29. Oktober 2004, 20:29

Hi!

Schreib doch: :D

Code: Alles auswählen

a = float(b) / float(c)


Gruß, mawe
Magnum
User
Beiträge: 3
Registriert: Freitag 29. Oktober 2004, 20:22

Beitragvon Magnum » Freitag 29. Oktober 2004, 20:51

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
Benutzeravatar
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Beitragvon Dookie » Freitag 29. Oktober 2004, 21:05

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

Code: Alles auswählen

#!/usr/bin/env python
import this
mawe
Python-Forum Veteran
Beiträge: 1209
Registriert: Montag 29. September 2003, 17:18
Wohnort: Purkersdorf (bei Wien [Austria])

Beitragvon mawe » Freitag 29. Oktober 2004, 21:10

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
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

Beitragvon Milan » Freitag 29. Oktober 2004, 21:12

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...
Zuletzt geändert von Milan am Freitag 29. Oktober 2004, 21:39, insgesamt 1-mal geändert.
Magnum
User
Beiträge: 3
Registriert: Freitag 29. Oktober 2004, 20:22

Beitragvon Magnum » Freitag 29. Oktober 2004, 21:27

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
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

Beitragvon Milan » Freitag 29. Oktober 2004, 21:40

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: ...
Benutzeravatar
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Beitragvon Dookie » Freitag 29. Oktober 2004, 21:57

@ Magnum: wenn die Spatzen groß genug sind ;)
Float und Long sind ja auch Klassen.


Dookie

Code: Alles auswählen

#!/usr/bin/env python
import this

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder