Seite 1 von 1
Python und Wurzelrechnen
Verfasst: Sonntag 16. November 2008, 01:11
von iway
Hi Leute!
Als erstes möchte ich sagen das ich erst anfange Python zu lernen.
Nun zu meinem Problem...
Ich rechne Folgendes :
a = 200
b = 300
c = a- b = -100
jetzt möchte ich den Betrag von c haben also rechne ich natürlich :
c² und davon die Wurzel also hoch 1/2
Mein Problem ist jetzt, dass wenn ich
10000**(1/2) rechne kommt 1 raus!
das versteh ich nicht kann mir dabei vill jemand weiter helfen?
Bin für jede info dankbar!
mfg
iway
ps: bitte nicht hauen!
Verfasst: Sonntag 16. November 2008, 01:28
von .robert
Verfasst: Sonntag 16. November 2008, 01:34
von iway
Danke für die schnelle Antwort!!
ich werds gleich mal testen!
EDIT: Danke!
Verfasst: Sonntag 16. November 2008, 01:38
von BlackVivi
Zum Fehler... Rechne einfach mal 1/2 so... was kommt heraus? 0, komisch, nicht wahr?... Binäre Operation + 2 Integer = Integer. Eines der Argumente sollte ein Double sein... 1.0/2 würde schon reichen.
Oder du importierst die neue Art der Division
Dann steht / für eine Division, bei der stets ein Float herauskommt und // für ganzzahlige Division.
Edit: Der Betrag lässt sich übrigens noch viel leichter über die Funktion ``abs`` herausfinden.
Verfasst: Sonntag 16. November 2008, 01:44
von iway
Aha vielen Dank für die Info!
Ok dann schreibe ich beim nächsten mal gleich 200.0 und 300.0.
mfg
iway
Verfasst: Sonntag 16. November 2008, 02:14
von Jan.O
iway hat geschrieben:
Ok dann schreibe ich beim nächsten mal gleich 200.0 und 300.0.
Es ging um den Exponenten und nicht um die Basis
. Das Komma spielt nur bei Divisionen eine rolle
Verfasst: Sonntag 16. November 2008, 02:15
von ichbinsisyphos
Ich will dich nicht noch mehr verwirren, aber bei floating point/integer sollt man aufpassen. Die beiden Dateitypen werden auf unterschiedliche Arten gespeichert. Floating Point stellt Ganzzahlen nicht immer exakt dar. Also wennst immer sofort alles nach float konvertierst, brauchst dich nicht wundern, wenn am Ende dann 9.99997 statt 10 oder so rauskommt, oder sich größere Fehler aufsummieren.
In dem Fall reichts, wennst den Exponenten konvertierst, damit er nicht Null wird.
Verfasst: Sonntag 16. November 2008, 03:01
von bremer
Wozu Brüche?
Geht.
Aber wie gesagt: Aufpassen.
Verfasst: Sonntag 16. November 2008, 16:43
von Redprince
Wozu überhaupt die Wurzel ziehen?
Verfasst: Sonntag 16. November 2008, 16:55
von numerix
Darauf hatte BlackVivi oben schon hingewiesen ...
Verfasst: Sonntag 16. November 2008, 17:25
von BlackJack
Selbst wenn es `abs()` noch nicht gäbe, kann man das mit einer ``if``-Abfrage einfacher implementieren als über Wurzelziehen.
Verfasst: Sonntag 16. November 2008, 17:40
von DasIch
Die einzig wahre Lösung ist doch:
Code: Alles auswählen
def foo(number):
if str(number).startswith('-'):
return number.__class__(str(number)[1:])
else:
return number
Verfasst: Sonntag 16. November 2008, 18:01
von Leonidas
DasIch hat geschrieben:Die einzig wahre Lösung ist
Nein, die nutzt doch noch gar keine Threads!
Verfasst: Sonntag 16. November 2008, 18:43
von DasIch
Code: Alles auswählen
class Foo(threading.Thread):
def __init__(self, number):
self.number = number
threading.Thread.__init__(self)
def run(self):
if str(self.number).startswith('-'):
self.result = eval(str(self.number)[1:])
else:
self.result = self.number
Ich hab jetzt sogar einmal underscore methods vermieden.
Verfasst: Sonntag 16. November 2008, 18:52
von str1442
Code: Alles auswählen
In [11]: number = -5
In [12]: ~(number) + 1
Out[12]: 5
Verfasst: Sonntag 16. November 2008, 19:52
von derdon
Hab auch noch einen:
Code: Alles auswählen
In [66]: from cmath import sqrt
In [67]: def abs_(num):
if isinstance(sqrt(num), complex):
return int(sqrt(num ** 2).real)
else:
return num
Verfasst: Sonntag 16. November 2008, 22:43
von name
str1442 hat geschrieben:Code: Alles auswählen
In [11]: number = -5
In [12]: ~(number) + 1
Out[12]: 5
Verfasst: Sonntag 16. November 2008, 22:53
von derdon
str1442 meinte bestimmt das hier:
Code: Alles auswählen
In [167]: def abs_(num):
.....: if num < 0:
.....: return ~(num) + 1
.....: else:
.....: return num
.....:
.....:
In [168]: print abs_(-5), abs_(5)
5 5