Deutsch
Quelltexte/ Codesnippets

Kubikwurzel aus negativen Zahlen

 

p.specht

Wurzeln ungerader ganzzahliger Radix (3. Wurzel, 5., 7. etc.) aus negativen Zahlen sind mathematisch zulässig. Reelle Argumente haben dabei reelle Ergebnisse, die das gleiche Vorzeichen tragen wie der Radikand, d.i. der Wert aus dem die Wurzel gezogen wird.

Leider wissen viele Programmiersprachen das nicht, und XProfan ist da keine Ausnahme. Die entsprechenden Abstürze haben mich zum folgenden Vergleich unterschiedlicher Kubikwurzel-Algorithmen geführt, die da nicht abstürzen.
Windowtitle "Diverse Kubikwurzelalgorithmen im Vergleich"
cls:font 2:set("decimals",17)
declare x!,y1!,y2!,y3!,y4!,w$,ex!

Repeat

    Print "\n Radikand x = ";:input w$:case w$="":end
    w$=upper$(trim$(w$)):ex!=if(instr("E",w$), val(substr$(w$,-1,"E")),0)

    ifnot between(ex!,-53,53):beep:print "\n *** Exponent out of Range! ***"

        waitinput:cls:continue:endif:x!=val(w$)
        y1!=cubrt1(x!):y2!=cubrt2(x!):y3!=cubrt3(x!)
        locate 4,3
        print "     cubrt1(x)            cubrt2(x)             cubrt3(x)"
        locate 6,3 :print format$("%g",y1!)
        locate 6,27:print format$("%g",y2!)
        locate 6,52:print format$("%g",y3!)
        print "\n Abs.Diff: y2-y1=          y3-y1=                y3-y2="
        locate 9,3 :print format$("%g",y2!-y1!)
        locate 9,27:print format$("%g",y3!-y1!)
        locate 9,52:print format$("%g",y3!-y2!)
        print "\n   Probe: y1^3             y2^3=                  y3^3="
        locate 12,3 :print format$("%g",sqr(y1!)*y1!)
        locate 12,27:print format$("%g",sqr(y2!)*y2!)
        locate 12,52:print format$("%g",sqr(y3!)*y3!)
        waitinput
        cls

    until 0

    proc cubrt1 :parameters x!

        var sgn!=1-2*(x!<0):x!=abs(x!)
        return if(x!=0,0,sgn!*x!^0.333333333333333333)

    endproc

    proc cubrt2 :parameters x!

        var sgn!=1-2*(x!<0):x!=abs(x!)
        return if(x!=0,0,sgn!*sqrt(x!)/x!^(1/6))

    endproc

    proc cubrt3 :parameters v!

        case V!=0:return 0.0:declare sg!,epsi!,r!,last_r!,i&
        sg!=if(V!<0,-1,1):v!=abs(v!):r!=1:i&=0
        epsi!=1.77*10^(-15+lg(V!)*(lg(V!)>0)/3)
        'lg(x)=ln(x)*0.434294481903251827

        while i&<=3000:last_r!=r!:r!=(2*r!+V!/sqr(r!))/3

            inc i&:case abs(r!-last_r!)<=epsi!:break
            endwhile:case i&>3000:return -9.9999999999e-52
            return r!*sg!

        endproc


P.S.: Beim Kubieren (dreimal mit sich selbst multiplizieren) von Null und negativen Zahlen mit dem ^-Symbol passieren ebenfalls Abstürze, da es keine solchen Argumente verträgt. Hier ist Abhilfe aber einfacher :proc cub :parameters x!:return sqr(x!)*x!:endproc
 
XProfan 11
Computer: Gerät, daß es in Mikrosekunden erlaubt, 50.000 Fehler zu machen, zB 'daß' statt 'das'...
22.05.2021  
 



Zum Quelltext


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

1.346 Betrachtungen

Unbenanntvor 0 min.
Rschnett06.08.2022
p.specht21.11.2021
R.Schneider20.11.2021
Uwe Lang20.11.2021
Mehr...

Themeninformationen

Dieses Thema hat 1 Teilnehmer:

p.specht (1x)


Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie