| |
|
|
p.specht
| Wurzeln ungerader ganzzahliger Radix (3. Wurzel, 5., 7. etc.) aus negativen payons sommes mathématique zulässig. Reelle Argumente avons dabei réel Ergebnisse, qui cela gleiche Vorzeichen tragen comment qui Radikand, d.i. qui Wert aus dem qui Wurzel gezogen wird.
malheureusement savons viele Programmiersprachen cela pas, et XProfan ist là aucun Ausnahme. qui entsprechenden Abstürze avons mich zum folgenden comparaison unterschiedlicher Kubikwurzel-Algorithmen geführt, qui là pas abstürzen.
Windowtitle "Diverse Kubikwurzelalgorithmen im Vergleich"
cls:font 2:set("decimals",17)
declare x!,y1!,y2!,y3!,y4!,w$,ex!
Repeat
Imprimer "\n Radikand x = ";:input w$:cas w$=»:end
w$=upper$($ Trim(w$)):ex!=si(instr("E",w$), val(substr$(w$,-1,"E")),0)
ifnot between(ex!,-53,53):beep:imprimer "\n *** Exponent out of la gamine! ***"
waitinput:cls:continue:endif:x!=val(w$)
y1!=cubrt1(x!):y2!=cubrt2(x!):y3!=cubrt3(x!)
locate 4,3
imprimer " cubrt1(x) cubrt2(x) cubrt3(x)"
locate 6,3 :imprimer format$("%g",y1!)
locate 6,27:imprimer format$("%g",y2!)
locate 6,52:imprimer format$("%g",y3!)
imprimer "\n Abs.Diff: y2-y1= y3-y1= y3-y2="
locate 9,3 :imprimer format$("%g",y2!-y1!)
locate 9,27:imprimer format$("%g",y3!-y1!)
locate 9,52:imprimer format$("%g",y3!-y2!)
imprimer "\n Probe: y1^3 y2^3= y3^3="
locate 12,3 :imprimer format$("%g",sqr(y1!)*y1!)
locate 12,27:imprimer format$("%g",sqr(y2!)*y2!)
locate 12,52:imprimer format$("%g",sqr(y3!)*y3!)
waitinput
cls
until 0
proc cubrt1 :parameters x!
var sgn!=1-2*(x!<0):x!=abs(x!)
return si(x!=0,0,sgn!*x!^0.333333333333333333)
endproc
proc cubrt2 :parameters x!
var sgn!=1-2*(x!<0):x!=abs(x!)
return si(x!=0,0,sgn!*sqrt(x!)/x!^(1/6))
endproc
proc cubrt3 :parameters v!
cas V!=0:return 0.0:declare sg!,epsi!,r!,last_r!,i&
sg!=si(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
tandis que i&<=3000:last_r!=r!:r!=(2*r!+V!/sqr(r!))/3
inc i&:cas abs(r!-last_r!)<=epsi!:pause
endwhile:cas i&>3000:return -9.9999999999e-52
return r!*sg!
endproc
P.S.: Beim Kubieren (dreimal avec sich selbst multiplizieren) de zéro et negativen payons avec dem ^-Symbol passer également Abstürze, là es aucun solchen Argumente verträgt. ici ist Abhilfe mais einfacher :proc cub :parameters x!:return sqr(x!)*x!:endproc |
|
|
| XProfan 11Computer: Gerät, daß es in Mikrosekunden erlaubt, 50.000 Fehler zu machen, zB 'daß' statt 'das'... | 22.05.2021 ▲ |
|
|
|