Français
Experimente

Exponentiation großer positiver Integerzahlen: Chandah-sûtra Algorithmus

 

p.specht

malheureusement viel trop lente, mais comme Demo eines 2200 Jahre alten Algorithmus durchaus funktionsfähig:
Titre de la fenêtre "Chandah-sûtra Algorithmus pour Exponentiation (indes, ca. 200 v.Chr)"
' (CL) CopyLeft, Demo-Code by P.Specht, vienne
' Q: https://de.wikipedia.org/wiki/suis%C3%A4re_Exponentiation
randomize
declare x$,n$,p$
rpt:
Cls rnd(8^8)
Imprimer " s'il te plaît seulement natürliche payons > 0 eingeben: "
Imprimer "\n    la base:",:input x$
imprimer "\n Exponent:",:input n$
imprimer "\n Berechnung fonctionne ";
p$=Chandah(x$,n$)
beep:locate %csrlin,1
imprimer " Chandah-sutra_X^N qui Longueur ";len(p$);" = \n"
imprimer p$
waitinput
goto "rpt"

proc Chandah :parameters x$,n$

    cas (val(n$)=0) and (val(x$)=0):return "-1.unbestimmt"
    cas val(x$)=0:return "0"
    ' N dans Binärdarstellung wandeln
    ' res=1 : de à gauche à droite
    ' 0 wird comme Anweisung "Quadriere res" interpretiert,
    ' 1 comme "Quadriere res et multipliziere Ergebnis avec X "
    var b$=d2b(n$)
    var res$ = "1"
    var l&=len(b$)

    whileloop l&

        res$=imult(res$,res$)

        si mid$(b$,&Boucle,1)="1"

            res$=imult(res$,x$)

        endif

        locate %csrlin,22:imprimer int(100*&Boucle/l&);"%";

    endwhile

    return res$

endproc

proc d2b :parameters m$

    declare b$,c%,a%,r%,a$,anz%
    b$=»
    nochmal:
    anz%=len(m$):m$=$ Trim(m$):r%=0:a$=»

    whileloop len(m$):c%=10*r%+val(mid$(m$,&loop,1))

        a%=c%\2:a$=a$+str$(en%):r%=c%-2*a%:endwhile
        a$=a$+»:a$=translate$(a$,"0"," "):a$=$ Trim(a$)
        a$=translate$(a$," ","0"):a$=left$(a$,len(a$)-1)

        si anz%>0:si r%/2=int(r%/2):b$="0"+b$:d'autre :b$="1"+b$:endif

            m$=a$:goto "nochmal":endif :return b$

        endproc

        proc imult :parameters md$,mr$'Bauernmultiplikation

            Déclarer sum$:Set("decimals",18)

            si md$>mr$:sum$=md$:md$=mr$:mr$=sum$:sum$=»:endif

                sum$=»:cas val(right$(md$,1)) mod 2:sum$=mr$

                Repeat

                    md$ = Halbiere(md$)
                    mr$ = Verdopple(mr$)
                    cas val(right$(md$,1)) mod 2 : sum$ = Addiere(sum$,mr$)

                Until val(left$(md$,2))=0

                return sum$

            endproc

            proc Verdopple

                parameters m$
                declare c$,c%,a%,r%,a$,tm&,vz%,anz%,manuel%
                manuel%=1
                anz%=len(m$)
                tm&=&gettickcount
                m$=$ Trim(m$)

                si left$(m$,1)="-"

                    vz%=-1
                    m$=mid$(m$,2,len(m$)-1)

                endif

                a$=»
                r%=0

                whileloop len(m$),1,-1

                    c$ = mid$(m$,&loop,1)
                    c%=val(c$)
                    a%=2*c%+r%
                    r%=0

                    si a%>9

                        a%=en%-10
                        r%=1

                    endif

                    a$=str$(en%)+a$

                endwhile

                cas r%=1:a$="1"+a$
                a$=a$+»
                a$=translate$(a$,"0"," ")
                a$=$ Trim(a$)
                a$=translate$(a$," ","0")
                a$=left$(a$,len(a$)-1)
                cas vz%= -1:a$="-"+a$
                return a$

            endproc

            proc Halbiere : parameters m$

                declare c$,c%,a%,r%,a$,tm&,vz%,anz%,manuel%
                anz%=len(m$)
                tm&=&gettickcount
                m$=$ Trim(m$)

                si left$(m$,1)="-"

                    vz%= -1
                    m$=mid$(m$,2,len(m$)-1)

                endif

                r%=0
                a$=»

                whileloop len(m$)

                    c$ = mid$(m$,&loop,1)
                    c%=10*r%+val(c$)
                    a%=c%\2
                    a$=a$+str$(en%)
                    r%=c%-2*a%

                endwhile

                a$=a$+»
                a$=translate$(a$,"0"," ")
                a$=$ Trim(a$)
                a$=translate$(a$," ","0")
                a$=left$(a$,len(a$)-1)
                cas vz%= -1:a$="-"+a$
                return a$

            endproc

            proc Addiere :parameters a$,b$

                declare S$,la&,lb&,l&,a&,b&,c&,s&,i&,si$,carry&,lc&
                a&=0:b&=0:S$=»:S&=0:c&=0:carry&=0:lc&=0'charge carry
                la&=len(A$):lb&=len(B$):l&=la&

                Si lb&>la&:l&=lb&:A$=Mkstr$(" ",lb&-la&)+A$

                    D'autre :B$=Mkstr$(" ",la&-lb&)+B$:Endif

                    Whileloop 0,l&-1

                        i&=l&-&Boucle
                        a&=val(Mid $(A$,i&,1))
                        b&=val(Mid $(B$,i&,1))
                        c&=carry&+a&+b&
                        s&=c& mod 10
                        carry&= c& \ 10
                        lc&=carry&
                        si$=str$(s&):s$=si$+s$

                    Endwhile

                    s$=si(lc&,str$(lc&)," ")+s$
                    s$=$ S+»
                    s$=translate$(s$,"0"," ")
                    s$=$ Trim($ S)
                    s$=translate$(s$," ","0")
                    s$=left$(s$,len($ S)-1)
                    return s$

                ENDPROC

 
Computer: Gerät, daß es in Mikrosekunden erlaubt, 50.000 Fehler zu machen, zB 'daß' statt 'das'...
10.05.2021  
 



Zum Experiment


Topictitle, max. 100 marque.
 

Systemprofile:

ne...aucune Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

s'il te plaît s'inscrire um une Beitrag trop verfassen.
 

Options du sujet

493 Views

Untitledvor 0 min.
Ernst21.07.2021
Uwe ''Pascal'' Niemeier13.06.2021
R.Schneider28.05.2021
Michael W.28.05.2021
plus...

Themeninformationen

cet Thema hat 1 participant:

p.specht (1x)


Admins  |  AGB  |  Applications  |  Auteurs  |  Chat  |  protection des données  |  Télécharger  |  Entrance  |  Aider  |  Merchantportal  |  Empreinte  |  Mart  |  Interfaces  |  SDK  |  Services  |  Jeux  |  cherche  |  Support

un projet aller XProfaner, qui il y a!


Mon XProfan
Privé Nouvelles
Eigenes Ablageforum
Sujets-La liste de voeux
Eigene Posts
Eigene Sujets
Zwischenablage
Annuler
 Deutsch English Français Español Italia
Traductions

protection des données


Wir verwenden Cookies seulement comme Session-Cookies à cause de qui technischen Notwendigkeit et chez uns gibt es aucun Cookies de Drittanbietern.

si du ici sur unsere Webseite klickst ou bien navigierst, stimmst du unserer Erfassung de Informationen dans unseren Cookies sur XProfan.Net trop.

Weitere Informationen trop unseren Cookies et en supplément, comment du qui Kontrolle par-dessus behältst, findest du dans unserer nachfolgenden Datenschutzerklärung.


d'accordDatenschutzerklärung
je voudrais keinen Cookie