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
hi,

Code: Alles auswählen

import math
print math.sqrt(10000)

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

Code: Alles auswählen

from __future__ import 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?

Code: Alles auswählen

10000 ** .5
Geht.

Aber wie gesagt: Aufpassen.

Code: Alles auswählen

>>> .7
0.69999999999999996
:roll:

Verfasst: Sonntag 16. November 2008, 16:43
von Redprince
Wozu überhaupt die Wurzel ziehen?

Code: Alles auswählen

abs(-100)

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

Code: Alles auswählen

>>> number = 5
>>> ~(number) + 1
-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