Seite 1 von 1

Wurzel rechen programm schneller machen

Verfasst: Freitag 23. September 2011, 20:08
von panzer134
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()


Re: Wurzel rechen programm schneller machen

Verfasst: Freitag 23. September 2011, 20:38
von CM
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

Re: Wurzel rechen programm schneller machen

Verfasst: Freitag 23. September 2011, 21:03
von noisefloor
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

Re: Wurzel rechen programm schneller machen

Verfasst: Samstag 24. September 2011, 10:12
von sma
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.