Kubikwurzel ziehen

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
dllfreak2001
Beiträge: 2925
Registriert: 07.09.2004 23:44
Wohnort: Bayern

Beitrag von dllfreak2001 »

jo wurde aber.
I´a dllfreak2001
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag von DarkDragon »

dllfreak2001 hat geschrieben:jo wurde aber.
Wo? Meinst du meine suxessive Approximation? Das ist doch nicht das was Kaeru meint.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Benutzeravatar
Karl
Beiträge: 520
Registriert: 21.07.2005 13:57
Wohnort: zu Hause

Beitrag von Karl »

Um eine Wurzel zu ziehen, kann man auch das Heron-Verfahren anwenden (ist eine Methode aus der numerischen Mathematik), oder was meint ihr wie der Rechner das berechnet (ROMs gab es wohl früher in Taschenrechnern).

Gruß Karl
The Kopyright Liberation Front also known as the justified ancients of Mumu!
PB 5.X
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag von DarkDragon »

Karl hat geschrieben:Um eine Wurzel zu ziehen, kann man auch das Heron-Verfahren anwenden (ist eine Methode aus der numerischen Mathematik), oder was meint ihr wie der Rechner das berechnet (ROMs gab es wohl früher in Taschenrechnern).

Gruß Karl
So in etwa ist ja auch die Approximationsroutine die ich gezeigt hab.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Benutzeravatar
Karl
Beiträge: 520
Registriert: 21.07.2005 13:57
Wohnort: zu Hause

Beitrag von Karl »

Nicht ganz, denn du verwendest POW und das soll ausgeschlossen sein. Erlaubt sind nur einfache Operationen ;-).

Aber Newton geht auch und hat eine schnellere Annäherung.

Gruß Karl
The Kopyright Liberation Front also known as the justified ancients of Mumu!
PB 5.X
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag von DarkDragon »

Karl hat geschrieben:Nicht ganz, denn du verwendest POW und das soll ausgeschlossen sein. Erlaubt sind nur einfache Operationen ;-).

Aber Newton geht auch und hat eine schnellere Annäherung.

Gruß Karl
Äh sorry, aber du missverstehst hier was: Wir wollen auf das R[T] von SQR[T] zurückkommen, nicht auf Pow. Egal: Dann halt mit nem eigenen Pow:

Code: Alles auswählen

#START_VALUE = $FFFFFFFF ; Einfach ein Startwert
#TOLLERANCE = 0.000001

Procedure.d MyPow(Val.d, Exp.l)
  Define k.l
  Define Result.d
  
  Result = Val
  For k=2 To Exp
    Result * Val
  Next k
  
  ProcedureReturn Result
EndProcedure

Procedure.d Wurzel(Val.d, Exp.l)
  Define Result.d = #START_VALUE
  Define Power.d = 0.0
  
  Repeat
    Power = MyPow(Result, Exp)
    If Power > Val + #TOLLERANCE
      Result * 0.5
    ElseIf Power < Val - #TOLLERANCE
      Result * 1.5
    Else
      Break
    EndIf
  ForEver
 
  ProcedureReturn Result
EndProcedure

Debug Wurzel(27, 3)
Was machts da jetzt für nen Unterschied? :freak:
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Benutzeravatar
Karl
Beiträge: 520
Registriert: 21.07.2005 13:57
Wohnort: zu Hause

Beitrag von Karl »

@DD: In der Berechnung gibt es keinen Unterschied (darf es ja auch nicht geben). Die historische Idee war ja nur, dass eine Wurzel nicht per se berechnet werden konnte und KGaman meinte, dass die interne Pow-Funktion sehr langsam ist. Mehr gab es nicht zu beanstanden ;-). Also stay cool.

Karl
The Kopyright Liberation Front also known as the justified ancients of Mumu!
PB 5.X
Antworten