Wurzel rechen programm schneller machen

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
panzer134
User
Beiträge: 10
Registriert: Freitag 18. März 2011, 17:48

Hi ich lass grad mein wurzelrechenprogramm ein bisschen rechen.
Das problem ist,dass meiner cpu wird nicht einmal auf einem kern halbe leistung abverlangt wird.
Kann ich dass programm irgendwie so programmieren dass es mehr kapazität von der cpu benutzt(bzw. vllt sogar multithreading)
vielen dank für nüzliche antworten schon mal im voraus
mfg.panzer134

Code: Alles auswählen

from decimal import *
z=1

getcontext().prec = 100000 
x=Decimal(1)
getcontext().prec = 100000
wurzel=Decimal(input("Wurzel"))
getcontext().prec = 100000
y=Decimal(wurzel)

while x != y :
    xeins=(x + y )/wurzel
    x=xeins
    yeins=(wurzel/x)
    y=yeins
    print("Rechnen...")



print("Die Wurzel hat folgenden Wert:")
print(x)
input()

CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Ein Teil der Antwort steht schon im alten Thread.

Außerdem: Das Decimal-Modul ist nicht geeignet für performantes Rechnen.
Und: Vermeide zu viel redundante Zuweisungen (u. a. braucht man xeins und yeins?)

Und was mich wirklich interessieren würde: Hast Du mit dem Code jemals eine Zahl bis zu der angegebenen Genauigkeit berechnen können? Ich glaube kaum.

Ich bin mal weniger ambitioniert:

Code: Alles auswählen

>>> getcontext().prec = 1000
>>> Decimal(2) ** Decimal('0.5')
Decimal('1.4142135623730950488016887242096...')
;-)

HTH,
Christian
Benutzeravatar
noisefloor
User
Beiträge: 3853
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

@panzer 134: Multitreading != Multi-CPU Nutzung. Wenn brauchst du das Multiprocessing Modul. Das setzt aber voraus, dass du dein Problem (Programm) in mehrere unabhängige "Unterprobleme" zerlegen kannst, die weitestgehend unabhängig berechnet werden können.

Gruß, noisefloor
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Selbst unter der Annahme, dass Python-Programme mehr als einen Thread parallel laufen lassen könnten, bräuchte man natürlich erst einmal einen Algorithmus, der überhaupt parallelisierbar ist. Der gezeigte Algorithmus ist es kaum - einzig der Ausdruck mit dem Komma könnte parallel berechnet werden:

Code: Alles auswählen

while x != y:
    x, y = (x + y) / w, w / x
Division ist zudem die für den Computer aufwändigste mathematisch Operation. Bessere wäre es, einen Algorithmus zu finden, der nur mit einfacheren Operationen auskommt. Wikipedia nennt einige.
Antworten