Problem mit Sqrt

  • Hey..wenn ich

    [autoit]

    Sqrt(2)

    [/autoit]

    mache bekomme ich ja die Wurzel zurück...aber wie mache ich das, dass ich die Wurzel auf 1000 nachkommastellen bekomme?

  • MIt sqrt geht das glaub ich nicht. Dü müsstest dir selbst eine art funktion schriben z.b. so:

    Wurzel aus 2= 2^(1/2)

    mit ^(1/2) zieht man glaub ich die Wurzel, und da kannst du es dann auf so viele stellen runden wie du willst. Is nur die Frage wie weit Autoit die Wurzl berechnet.

    mfg

    Edit: Bin gerade drauf gekommen das Autoit anscheinend nur 14 stellen hinter dem Komma berechnt, also funk das auch nicht so ganz.

    Computers are like Airconditioning. They don´t work with open Windows.

  • Hier gibts die Erklärung der handschriftlichen Methode, welche auch sehr einfach in ein AutoIt-Script umzuwandeln sein sollte. Für die Multiplikation und Division großer Zahlen bietet sich die schon angesprochene BIGINT-UDF an.

  • Wie gesagt, die wurzel kann na ganz einfac berechnen indem man die Zahl aus der man die wurzel zeihen will hoch 1/2 für Quadratwurzel, hoch 1/3 für die 3. wurzel usw rechnet.

    Das ist auch sehr leicht mit autoit zu verwirklchen nur muss man tortzdem mit bigint od sowas rechenen, da autoit nicht besonders weit inters komma rechnet.

    mfg

    Computers are like Airconditioning. They don´t work with open Windows.

  • Wie gesagt, die wurzel kann na ganz einfac berechnen indem man die Zahl aus der man die wurzel zeihen will hoch 1/2 für Quadratwurzel, hoch 1/3 für die 3. wurzel usw rechnet.

    Und wo ist jetzt da der unterschied?

    [autoit]

    MsgBox(0,"",Sqrt(2))
    MsgBox(0,"",(2)^(1/2))

    [/autoit]
  • Hab mal das Heronverfahren nachgebaut.

    Spoiler anzeigen
    [autoit]


    #include "BigNum.au3"

    [/autoit] [autoit][/autoit] [autoit]

    ConsoleWrite(_Sqrt(2,2, 10,20 ))

    [/autoit] [autoit][/autoit] [autoit]

    Func _Sqrt($num, $X0, $loops,$ID)
    ;Wurzelberechnung nach dem Heronverfahren
    ;num = Zahl aus der die Quadratwurzel gezogen werden soll
    ;X0 = Startwert (<>0)
    ;loops = Anzahl der Durchgänge (Heronverfahren)
    ;$ID =Anzahl Dezimalstellen
    local $y = $X0, $t
    for $i = 1 to $loops
    $y = _BigNum_Div(_BigNum_Add($Y,_BigNum_Div($num, $Y,$ID)),2,$ID)
    if $t = $y Then
    ConsoleWrite( "Xn =" & $t & "= Xn+1 =" & $y & @CRLF)
    return $y
    endif
    $t = $y
    ConsoleWrite( $i & " " & $y & @CRLF)
    Next
    Return $y
    endfunc

    [/autoit]

    Einmal editiert, zuletzt von nuts (29. Dezember 2009 um 16:25)

  • SEuBo: es ist keiner, weil die Sqrt funktion genau das macht was ich geschrieben ahbe, bin erst jetzt drauf gekommen das es das gleiche ist^^

    mfg

    Computers are like Airconditioning. They don´t work with open Windows.