; ; test_tst0_cardanic.rta : ====================== ; ; CARDANISCHE FORMEL I ; -------------------- ; ; Die Cardanische Formel löst kubische Gleichungen. ; ; HAUPTPROGRAMM MIT »MOTHERCODE«. ; ; Aus diesem Programm sind Codekopien in andere Programme möglich. ; ; Damit es beim Code kopieren keine Dubletten gibt, beginnen hier alle Variablennamen ; mit einem Punkt. ; ; Eingabe: Es werden die 4 Koeffizienten der Allgemeinen Form im Dialog abgefragt. ; ; Ausgabe: Die Lösung steht auf der Variablen .radix. ; Wenn .radix -9999 ist, so war das Programm nicht erfolgreich. ; (Dies ist beim casus irreducibilis der Fall, welcher im vorgegebenen Kontext uninteressant war.) ; ; Anmerkung: Cardani hat die Formel nur gestohlen. Der Urheber war ; Niccolo Tartaglia ca. 1500 bis 1557. Das Cardanische Gelenk hat er übrigens ; auch nur gemaust. ; ; (C) Rolf Böhm 2008 ; ; Koeffizienten der allgemeinen Form _var .a _var .b _var .c _var .d ; Koeffizienten den Normalform _var .r _var .s _var .t ; Koeffizienten der reduzierten Form _var .p _var .q ; Temporär _var .t1 _var .t2 _var .radic ; Der Radikand (oder die Determinante D), der negativ in den casus irredublicus führt _var .radix ; Die Lösung ; ; KUBISCHE GLEICHUNG LÖSEN ; input .d Absolutglied input .c Linearglied input .b Quadratisches~Glied input .a Kubisches~Glied ; ; Normalform ; nop mov .r .b div .r .a mov .s .c div .s .a mov .t .d div .t .a ; ; Reduzierte Form ; nop mov .p .s mov .t1 .r power .t1 2 div .t1 3 sub .p .t1 mov .q .r power .q 3 div .q 27 mul .q 2 mov .t1 .s mul .t1 .r div .t1 3 sub .q .t1 add .q .t ; ; Radikant (manchmal Determinante D genannt) ; nop mov .radic .q power .radic 2 div .radic 4 mov .t1 .p power .t1 3 div .t1 27 add .radic .t1 tstge .radic $cardani jump $casus_irreducibilis ; ; Casus irreducibilis ; ; Den braucht man für Netzentwürfe nicht ; output Casus~irreducibilis mov .radix -9999 exit ; ; Cardanische Formel ; $cardani: root .radic 2 ; Radicant computed ; ; Cardanische Formel ; nop mov .t1 .q div .t1 2 neg .t1 mov .t2 .t1 add .t2 .radic root .t2 3 mov .radix .t2 mov .t2 .t1 sub .t2 .radic root .t2 3 add .radix .t2 ; ; Rücksubstitution reduziert --> Normalform ; mov .t1 .r div .t1 3 sub .radix .t1 ; ; Probe ; nop clr .t1 mov .t2 .radix power .t2 3 mul .t2 .a add .t1 .t2 mov .t2 .radix power .t2 2 mul .t2 .b add .t1 .t2 mov .t2 .radix mul .t2 .c add .t1 .t2 add .t1 .d mov .t2 .t1 abs .t2 cmplt .t2 1E-12 $success pause Fehler!!! $success: output .radix Lösung output .t1 Rechte~Seite~(muss~0~sein) ; ; (Die Lösung steht jetzt auf der Variablen .radix) ; exit _end