Español
Experimente

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

 

p.specht

Leider viel a langsam, aber como Demo uno 2200 Jahre alten Algorithmus durchaus funktionsfähig:
Título de la ventana "Chandah-sûtra Algorithmus para Exponentiation (Indien, ca. 200 v.Chr)"
' (CL) CopyLeft, Demo-Code by P.Pájaro carpintero, Wien
' Q: https://de.wikipedia.org/wiki/Bin%C3%A4re_Exponentiation
randomize
declarar x$,n$,p$
rpt:
Cls rnd(8^8)
Imprimir " Por favor, sólo natürliche Pagar > 0 eingeben: "
Imprimir "\n    Base:",:input x$
imprimir "\n Exponent:",:input n$
imprimir "\n Berechnung se ejecuta ";
p$=Chandah(x$,n$)
beep:locate %csrlin,1
imprimir " Chandah-sutra_X^N el Longitud ";len(p$);" = \n"
imprimir p$
waitinput
goto "rpt"

proc Chandah :parámetros x$,n$

    caso (val(n$)=0) and (val(x$)=0):volver "-1.unbestimmt"
    caso val(x$)=0:volver "0"
    ' N en Binärdarstellung wandeln
    ' res=1 : de links después de rechts
    ' 0 se como Anweisung "Quadriere res" interpretiert,
    ' 1 como "Quadriere res y multipliziere Ergebnis con X "
    var b$=d2b(n$)
    var res$ = "1"
    var l&=len(b$)

    whileloop l&

        res$=imult(res$,res$)

        if mid$(b$,&Loop,1)="1"

            res$=imult(res$,x$)

        endif

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

    endwhile

    volver res$

ENDPROC

proc d2b :parámetros m$

    declarar b$,c%,a%,r%,a$,anz%
    b$=""
    otra vez:
    anz%=len(m$):m$=trim$(m$):r%=0:a$=""

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

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

        if anz%>0:if r%/2=int(r%/2):b$="0"+b$:más :b$="1"+b$:endif

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

        ENDPROC

        proc imult :parámetros md$,mr$'Bauernmultiplikation

            Declarar sum$:Conjunto("decimals",18)

            if md$>mr$:sum$=md$:md$=mr$:mr$=sum$:sum$="":endif

                sum$="":caso val(right$(md$,1)) mod 2:sum$=mr$

                Repeat

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

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

                volver sum$

            ENDPROC

            proc Verdopple

                parámetros m$
                declarar c$,c%,a%,r%,a$,tm&,vz%,anz%,manuell%
                manuell%=1
                anz%=len(m$)
                tm&=&gettickcount
                m$=trim$(m$)

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

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

                endif

                a$=""
                r%=0

                whileloop len(m$),1,-1

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

                    if a%>9

                        a%=a%-10
                        r%=1

                    endif

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

                endwhile

                caso r%=1:a$="1"+a$
                a$=a$+":"
                a$=translate$(a$,"0"," ")
                a$=trim$(a$)
                a$=translate$(a$," ","0")
                a$=left$(a$,len(a$)-1)
                caso vz%= -1:a$="-"+a$
                volver a$

            ENDPROC

            proc Halbiere : parámetros m$

                declarar c$,c%,a%,r%,a$,tm&,vz%,anz%,manuell%
                anz%=len(m$)
                tm&=&gettickcount
                m$=trim$(m$)

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

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

                endif

                r%=0
                a$=""

                whileloop len(m$)

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

                endwhile

                a$=a$+":"
                a$=translate$(a$,"0"," ")
                a$=trim$(a$)
                a$=translate$(a$," ","0")
                a$=left$(a$,len(a$)-1)
                caso vz%= -1:a$="-"+a$
                volver a$

            ENDPROC

            proc Addiere :parámetros a$,b$

                declarar 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'last carry
                la&=len(A$):lb&=len(B$):l&=la&

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

                    Más :B$=Mkstr$(" ",la&-lb&)+B$:Endif

                    Whileloop 0,l&-1

                        i&=l&-&Loop
                        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$=if(lc&,str$(lc&)," ")+s$
                    s$=s$+":"
                    s$=translate$(s$,"0"," ")
                    s$=trim$(s$)
                    s$=translate$(s$," ","0")
                    s$=left$(s$,len(s$)-1)
                    volver s$

                ENDPROC

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



Zum Experiment


Título del Tema, max. 100 Signo.
 

Systemprofile:

Kein Systemprofil creado. [anlegen]

XProfan:

 Contribución  Font  Smilies  ▼ 

Bitte registro en una Contribución a verfassen.
 

Tema opciones

446 Views

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

Themeninformationen

Dieses Thema ha 1 subscriber:

p.specht (1x)


Admins  |  AGB  |  Applications  |  Autores  |  Chat  |  Política de Privacidad  |  Descargar  |  Entrance  |  Ayuda  |  Merchantportal  |  Pie de imprenta  |  Mart  |  Interfaces  |  SDK  |  Services  |  Juegos  |  Búsqueda  |  Support

Ein Projekt aller XProfan, el lo son!


Mi XProfan
Privado Noticias
Eigenes Ablageforum
Temas-Merkliste
Eigene Beiträge
Eigene Temas
Zwischenablage
Cancelar
 Deutsch English Français Español Italia
Traducciones

Política de Privacidad


Wir uso Cookies sólo como Session-Cookies wegen el technischen Notwendigkeit y en uns hay no Cookies de Drittanbietern.

Wenn du hier en unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung de Informationen en unseren Cookies en XProfan.Net a.

Weitere Informationen a unseren Cookies y dazu, como du el Kontrolle darüber behältst, findest du en unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Yo möchte no Cookie