Français
Experimente

Bitleisten et BiBit-Leisten

 

p.specht

Bitleisten (ici dans purem XProfan11) devoir comme speicherplatz-sparende Version de massenhaften 2-Zustands-Sauver, etwa chez qui réalisation eines schnellen Primzahlenfilters* ou bien dem indexierten Löschvermerk einer banque de données dienen.

cela nachfolgende Machwerk est un allererster Versuch en supplément, ist mais assez lente. Pour qui Praxis wären flottere Lösungen, etwa avec Bereichsvariablen et per Assembler ou bien juste per Windows-API gefragt.
Titre de la fenêtre " Simulation de bit-Leisten mittels Long&-Arrays (beta)"
' Copyleft (CL) 2012-12 by P. Specht; OHNE GEWÄHR!
declare z$,z&,idx!,max!,dw&[],dwx&,bw&,bw1&,bitImLong&
huch:
cls:font 2:color 0,15
max!=fetch(" Höchster vorkommender bit-index [ab 0]?: ",max!)

si max!<0:faute():Imprimer " Negative Indizes dzt. pas vorgesehen! *** "

    max!=0:waitinput :goto "huch"

endif

si max!>2147483615:faute():Imprimer " Max.index dzt.2^31-32-1= 2147483615, GT. INT()"

    max!=2147483615:waitinput :goto "huch"

endif

z&=int(max!/32+1):setsize dw&[],z&
Imprimer " en supplément wurden ";z&;" Long&-Variablen alloziert."
imprimer " Probe: 32*";z&;"=";int(z&*32);" bit":imprimer

REPEAT

    nochmal:
    idx!=fetch(" bit-index: ",idx!)

    si idx!>max!

        faute()
        imprimer " Obergrenze ";int(max!);" überschritten! *** \n"
        color 0,15:idx!=max!:goto "nochmal"

    elseif idx!<0:faute():imprimer " Negative Indizes sommes pas vorgesehen! *** \n"

        color 0,15:idx!=0:goto "nochmal"

    endif

    dwx&=int(idx!/32)
    bitImLong&=int(idx!-dwx&*32)
    bw&=@Test peu(dw&[dwx&],bitImLong&)
    z$=" Long&["+str$(dwx&)+"] : bit["+str$(bitImLong&)+"] ?= "
    bw1&=fetch(z$,bw&)
    bw1&=(bw1&<>0)

    si bw&<>bw1&: dw&[dwx&]=setbit(dw&[dwx&],bitImLong&,bw1&)

        color 1,15:locate %csrlin-1,31
        imprimer ":bit[";int(idx!);"] ist eh bien ";bw1&:color 0,15

    endif

    imprimer

    si idx!>=max!

        idx!=max!
        imprimer " *** avertissement: Obergrenze erreicht! ***"

    d'autre

        idx!=int(idx!)+1

    endif

ENDWHILE

FIN

proc fetch :parameters txt$,idx! :declare z$

    imprimer txt$;int(idx!):locate %csrlin-1,len(txt$)+1:input z$
    cas %csrlin>19:cls
    return si(z$=»,idx!,val(z$))

endproc

proc faute

    color 12,15
    imprimer " *** FEHLER:";
    sound 500,100

endproc


Anmerkung: avec Floating-Point-Ganzzahlen pourrait on im Bereich +/- 9007199254740992 correct bits indexieren, - nimmt on cela Vorzeichenbit aussi encore avec, ensuite allez qui Bereich de 0 - 18 014 398 409 481 984. Theoretisch pourrait on avec cela un Eratosthenes-filtre pour ca. qui ersten 720 Bio. Primzahlen aufbauen (Geschätzte Primzahldichte quelque chose sous 4%) - allerdings: wohin Sauver wir qui 2048 Terabyte qui Bitleiste? (de qui Rechenzeit gar pas trop reden...). Selbst si wir Runlenght-Encoden ist le reste toujours gewaltig...
 
Computer: Gerät, daß es in Mikrosekunden erlaubt, 50.000 Fehler zu machen, zB 'daß' statt 'das'...
16.06.2021  
 




p.specht

Bibit-Leiste
=========
Pour une Rechtecksmatrix-InPlace-Transposition était un Status-Doppelbitleiste
(Bibit-peigne) avec den möglichen Werten {0,1,2,3} erforderlich. bien sûr doit on aussi cela dans qui Praxis encore clever beschleunigen, mais cela Prinzip klappt déjà la fois.

qui service des Machwerks ist quelque chose gewöhnungsbedürftig (mais letztendlich soll cela de toute façon qui ordinateur faire): Einzugeben sommes stets qui index-Wert, ensuite wird qui Ist-Zustand des relevanten Doppelbits angezeigt et peux par den neuen Zustand (0..3) ersetzt volonté.

Titre de la fenêtre "Bibit-Leiste aus 2il-Bitgruppen z.B. pour Bearbeitungsstatus-Werte 0,1,2,3"
'CopyLeft (CL) 2012-12ff by P. Specht. Jedwede la responsabilité ist ausdrücklich ausgeschlossen!
randomize:font 2:Cls rnd(8^8)
Déclarer max&,idx&,wert&,lx&,bbiL&,dans$
Imprimer " Max.Bibit-Indexwert = ";:input max&
Déclarer bb&[max&/16]
Imprimer " Anzahl benötigter Longs: ";int(max&\16+1)
bb&[0]=rnd(4294967295):imprimer " Test bb&[0]:Bibit-Idx:15__0: ";suis$(bb&[0])

Repeat

    imprimer "\n Bibit-index: ";idx&,»,:input idx&
    lx&=idx&\16:imprimer " bb-idx=";lx&
    bbiL&=(idx& mod 16)*2:imprimer " bbiL&=";bbiL&
    wert&=(bb&[lx&] & (3<<bbiL&))>>(bbiL&)
    imprimer "  Ist:",wert&," Soll:",:input dans$

    si dans$>»

        wert&=val(dans$) mod 4
        bb&[lx&]=bb&[lx&] & (4294967295-(3<<bbiL&)) | (wert&<<bbiL&)
        wert&=(bb&[lx&] & (3<<bbiL&))>>bbiL&
        locate %csrlin-1,30:imprimer "... ist nun",wert&

    endif

until 0

Fin
 
Computer: Gerät, daß es in Mikrosekunden erlaubt, 50.000 Fehler zu machen, zB 'daß' statt 'das'...
16.06.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

1.481 Views

Untitledvor 0 min.
p.specht18.09.2021
Uwe ''Pascal'' Niemeier23.08.2021
Thomas Zielinski13.08.2021
Ernst21.07.2021
plus...

Themeninformationen

cet Thema hat 1 participant:

p.specht (2x)


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