| |
|
|
p.specht
| Bitleisten (aquí en purem XProfan11) debería como speicherplatz-sparende Versión de massenhaften 2-Zustands-Guardar, etwa en Realisierung uno schnellen Primzahlenfilters* oder el indexierten Löschvermerk uno Datenbank dienen.
Das nachfolgende Machwerk es una allererster Intento dazu, es aber bastante langsam. Für el Praxis wären flottere Lösungen, etwa con Bereichsvariablen y por Ensamblador oder igual por Windows-API gefragt.
Título de la ventana " Simulation de bit-Leisten mittels Long&-Arrays (beta)"
' Copyleft (CL) 2012-12 by P. Specht; OHNE GEWÄHR!
declarar z$,z&,idx!,max!,dw&[],dwx&,bw&,bw1&,bitImLong&
huch:
cls:font 2:color 0,15
max!=fetch(" Höchster vorkommender bit-Index [de 0]?: ",max!)
if max!<0:fehler():Imprimir " Negative Indizes dzt. no vorgesehen! *** "
max!=0:waitinput :goto "huch"
endif
if max!>2147483615:fehler():Imprimir " Max.Index dzt.2^31-32-1= 2147483615, ca. INT()"
max!=2147483615:waitinput :goto "huch"
endif
z&=int(max!/32+1):setsize dw&[],z&
Imprimir " Dazu fueron ";z&;" Long&-Variables alloziert."
imprimir " Probe: 32*";z&;"=";int(z&*32);" bit":imprimir
REPEAT
otra vez:
idx!=fetch(" bit-Index: ",idx!)
if idx!>max!
fehler()
imprimir " Obergrenze ";int(max!);" überschritten! *** \n"
color 0,15:idx!=max!:goto "nochmal"
elseif idx!<0:fehler():imprimir " Negative Indizes son no vorgesehen! *** \n"
color 0,15:idx!=0:goto "nochmal"
endif
dwx&=int(idx!/32)
bitImLong&=int(idx!-dwx&*32)
bw&=@TestBit(dw&[dwx&],bitImLong&)
z$=" Long&["+str$(dwx&)+"] : bit["+str$(bitImLong&)+"] ?= "
bw1&=fetch(z$,bw&)
bw1&=(bw1&<>0)
if bw&<>bw1&: dw&[dwx&]=setbit(dw&[dwx&],bitImLong&,bw1&)
color 1,15:locate %csrlin-1,31
imprimir ":bit[";int(idx!);"] es nun ";bw1&:color 0,15
endif
imprimir
if idx!>=max!
idx!=max!
imprimir " *** Warnung: Obergrenze erreicht! ***"
más
idx!=int(idx!)+1
endif
ENDWHILE
FIN
proc fetch :parámetros txt$,idx! :declarar z$
imprimir txt$;int(idx!):locate %csrlin-1,len(txt$)+1:input z$
caso %csrlin>19:cls
volver if(z$="",idx!,val(z$))
ENDPROC
proc fehler
color 12,15
imprimir " *** FEHLER:";
sound 500,100
ENDPROC
Anmerkung: Mit Floating-Punto-Ganzzahlen podría uno en +/- 9007199254740992 fehlerfrei bits indexieren, - nimmt al Vorzeichenbit auch todavía con, entonces va el Zona de 0 - 18 014 398 409 481 984. Theoretisch podría uno así una Eratosthenes-Filter para ca. el ersten 720 Bio. Primzahlen aufbauen (Geschätzte Primzahldichte algo bajo 4%) - allerdings: Wo speichern wir el 2048 Terabyte el Bitleiste? (Von el Rechenzeit nada a reden...). Selbst si wir Runlenght-Encoden es el todavía siempre 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 ========= Für una Rechtecksmatrix-InPlace-Transposition fue un Status-Doppelbitleiste (Bibit-Kamm) con el möglichen Werten {0,1,2,3} erforderlich. Selbstverständlich muß uno auch el en el Praxis todavía clever beschleunigen, aber el Principio klappt ya veces.
El Bedienung des Machwerks es algo gewöhnungsbedürftig (aber letztendlich se el ohnehin el Computer hacer): Einzugeben son stets el Index-Valor, Luego se el Ist-Zustand des relevanten Doppelbits adecuado y kann por el neuen Zustand (0..3) ersetzt voluntad.
Título de la ventana "Bibit-Leiste de 2él-Bitgruppen z.B. para Bearbeitungsstatus-Werte 0,1,2,3"
'CopyLeft (CL) 2012-12ff by P. Pájaro carpintero. Jedwede Haftung es ausdrücklich ausgeschlossen!
randomize:font 2:Cls rnd(8^8)
Declarar max&,idx&,wert&,lx&,bbiL&,en$
Imprimir " Max.Bibit-Indexwert = ";:input max&
Declarar bb&[max&/16]
Imprimir " Anzahl benötigter Longs: ";int(max&\16+1)
bb&[0]=rnd(4294967295):imprimir " Test bb&[0]:Bibit-Idx:15__0: ";bin$(bb&[0])
Repeat
imprimir "\n Bibit-Index: ";idx&,",",:input idx&
lx&=idx&\16:imprimir " bb-idx=";lx&
bbiL&=(idx& mod 16)*2:imprimir " bbiL&=";bbiL&
wert&=(bb&[lx&] & (3<<bbiL&))>>(bbiL&)
imprimir " Ist:",wert&," Soll:",:input en$
if en$>""
wert&=val(en$) mod 4
bb&[lx&]=bb&[lx&] & (4294967295-(3<<bbiL&)) | (wert&<<bbiL&)
wert&=(bb&[lx&] & (3<<bbiL&))>>bbiL&
locate %csrlin-1,30:imprimir "... es nun",wert&
endif
until 0
End
|
|
|
| Computer: Gerät, daß es in Mikrosekunden erlaubt, 50.000 Fehler zu machen, zB 'daß' statt 'das'... | 16.06.2021 ▲ |
|
|
|