Python und Wurzelrechnen

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.
iway
User
Beiträge: 3
Registriert: Mittwoch 5. Dezember 2007, 18:35

Sonntag 16. November 2008, 01:11

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!
.robert
User
Beiträge: 274
Registriert: Mittwoch 25. April 2007, 17:59

Sonntag 16. November 2008, 01:28

hi,

Code: Alles auswählen

import math
print math.sqrt(10000)
iway
User
Beiträge: 3
Registriert: Mittwoch 5. Dezember 2007, 18:35

Sonntag 16. November 2008, 01:34

Danke für die schnelle Antwort!!
ich werds gleich mal testen!

EDIT: Danke!
Zuletzt geändert von iway am Sonntag 16. November 2008, 01:41, insgesamt 1-mal geändert.
Benutzeravatar
BlackVivi
User
Beiträge: 762
Registriert: Samstag 9. Dezember 2006, 14:29
Kontaktdaten:

Sonntag 16. November 2008, 01:38

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.
iway
User
Beiträge: 3
Registriert: Mittwoch 5. Dezember 2007, 18:35

Sonntag 16. November 2008, 01:44

Aha vielen Dank für die Info!

Ok dann schreibe ich beim nächsten mal gleich 200.0 und 300.0.

mfg

iway
Jan.O
User
Beiträge: 61
Registriert: Samstag 26. April 2008, 00:32

Sonntag 16. November 2008, 02:14

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
Zuletzt geändert von Jan.O am Sonntag 16. November 2008, 02:15, insgesamt 1-mal geändert.
ichbinsisyphos
User
Beiträge: 120
Registriert: Montag 4. Juni 2007, 19:19

Sonntag 16. November 2008, 02:15

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.
bremer
User
Beiträge: 109
Registriert: Sonntag 25. Mai 2008, 00:13

Sonntag 16. November 2008, 03:01

Wozu Brüche?

Code: Alles auswählen

10000 ** .5
Geht.

Aber wie gesagt: Aufpassen.

Code: Alles auswählen

>>> .7
0.69999999999999996
:roll:
Redprince
User
Beiträge: 128
Registriert: Freitag 22. Oktober 2004, 09:22
Wohnort: Salzgitter
Kontaktdaten:

Sonntag 16. November 2008, 16:43

Wozu überhaupt die Wurzel ziehen?

Code: Alles auswählen

abs(-100)
I am not part of the allesburner. I am the [url=http://allesburner.de]allesburner[/url].
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Sonntag 16. November 2008, 16:55

Darauf hatte BlackVivi oben schon hingewiesen ...
BlackJack

Sonntag 16. November 2008, 17:25

Selbst wenn es `abs()` noch nicht gäbe, kann man das mit einer ``if``-Abfrage einfacher implementieren als über Wurzelziehen.
DasIch
User
Beiträge: 2450
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Sonntag 16. November 2008, 17:40

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
;)
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Sonntag 16. November 2008, 18:01

DasIch hat geschrieben:Die einzig wahre Lösung ist
Nein, die nutzt doch noch gar keine Threads!
My god, it's full of CARs! | Leonidasvoice vs Modvoice
DasIch
User
Beiträge: 2450
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Sonntag 16. November 2008, 18:43

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.
Benutzeravatar
str1442
User
Beiträge: 520
Registriert: Samstag 31. Mai 2008, 21:13

Sonntag 16. November 2008, 18:52

Code: Alles auswählen

In [11]: number = -5

In [12]: ~(number) + 1
Out[12]: 5
Antworten