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!
Python und Wurzelrechnen
hi,
Code: Alles auswählen
import math
print math.sqrt(10000)
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.
Oder du importierst die neue Art der Division
Code: Alles auswählen
from __future__ import division
Edit: Der Betrag lässt sich übrigens noch viel leichter über die Funktion ``abs`` herausfinden.
Es ging um den Exponenten und nicht um die Basis . Das Komma spielt nur bei Divisionen eine rolleiway hat geschrieben:
Ok dann schreibe ich beim nächsten mal gleich 200.0 und 300.0.
Zuletzt geändert von Jan.O am Sonntag 16. November 2008, 02:15, insgesamt 1-mal geändert.
-
- 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.
In dem Fall reichts, wennst den Exponenten konvertierst, damit er nicht Null wird.
Wozu Brüche?
Geht.
Aber wie gesagt: Aufpassen.
Code: Alles auswählen
10000 ** .5
Aber wie gesagt: Aufpassen.
Code: Alles auswählen
>>> .7
0.69999999999999996
-
- 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].
Selbst wenn es `abs()` noch nicht gäbe, kann man das mit einer ``if``-Abfrage einfacher implementieren als über Wurzelziehen.
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
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
Code: Alles auswählen
In [11]: number = -5
In [12]: ~(number) + 1
Out[12]: 5
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
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.
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.
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