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

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

hi,

Code: Alles auswählen

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

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:

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

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

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

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

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:

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

Darauf hatte BlackVivi oben schon hingewiesen ...
BlackJack

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

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
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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 (former) Modvoice
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

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

Code: Alles auswählen

In [11]: number = -5

In [12]: ~(number) + 1
Out[12]: 5
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

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
Benutzeravatar
name
User
Beiträge: 254
Registriert: Dienstag 5. September 2006, 16:35
Wohnort: Wien
Kontaktdaten:

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
>>> 
Ohloh | Mein Blog | Jabber: segfaulthunter@swissjabber.eu | asynchia – asynchrone Netzwerkbibliothek

In the beginning the Universe was created. This has made a lot of people very angry and has been widely regarded as a bad move.
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

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
Antworten