3x3x3 LED Cube - Zufallsgesteuert mit Bascom

  • Das ist aber für diesen Fall irrelevant. Das Benfordsche Gesetz bezieht sich auf empirische Daten, welche häufig eine Normalverteilung (Glockenkurve) der Werte aufweisen. Da kann man das Gesetz korrekterweise gut anwenden. ABER bei einer Gleichverteilung aller Werte eines vollen Wertebereiches (mit voll meine ich beispielsweise 0000 - 9999 für Dezimalzahlen oder eben z.Bsp. 0000 bis 1111 für Binärzahlen) treten auch deren Ziffernwerte unabhängig von der Stelle gleich häufig auf.


    Oh mann, langsam komme ich mir echt wie ein Oberlehrer vor :D .


    Gruss
    Neni

    Die Theorie ist mir doch klar, auch wann das benfordsche Gesetz gilt, nur schau dir mal die Tabelle an. Warum ist das bloß so? :/ Ich könnt verzweifeln...


    Die Paarungen - deswegen die Symmetrie im Diagramm - sind natürlich immer gleich verteilt. Also 000000000 und 111111111 sind natürlich gleich häufig vertreten. Aber eben nicht so oft wie im Mittelmaß.

  • Ok, aber sprechen wir denn immer noch von Gleichverteilung? Denn darum geht es ja schliesslich. D.h. sind denn alle Werte (egal wie du sie jetzt erzeugst) des vollen Binär-Wertebereichs in deinem Verfahren wirklich gleich häufig, wie es zum Beispiel im ersten Diagramm bei rand(511) nicht aber bei 9 x rand(1) den Anschein hatte?
    Dann MUSS auch die Häufigkeit von 0 oder 1 der einzelnen Bits auch gleich häufig sein. Zeig doch mal den Code, wie du konkret die Bit-Auswertung aufgrund der Zahlen machst.


    Gruss
    Neni


  • Ich bin mir auch sicher, dass da irgendwo ein Fehler ist, aber es sieht alles zu logisch aus. Klar ist mir bekannt, dass bei den Zahlen 0 bis 511 das 1te bis 9te Bit immer gleich häufig mit je 256 Varianten vorkommt.

  • :D


    Tja, die PHP-Funktion decbin gibt ja einen String mit unterschiedlicher Länge je nach Wert zurück... klingelt's jetzt schon :?:


    also: 2 ergibt "10"
    aber: 9 ergibt "1001"


    Wenn du nun einfach den String praktisch als 9-elementiges Array durchläufst, dann erhälst du ja für Stellen, welche im String ja gar nicht vorhanden sind, falsche Resultate. Du müsstest also sicher mal alle nicht vorhandenen Stellen mit "0" auffüllen


    Ausserdem solltest du wenn schon auf if($temp[$a] == "1") prüfen, da es sich ja um einen String handelt.


    Und ich bin mir ehrlich gesagt gar nicht sicher, ob du in PHP einen String auch einfach als Array behandeln kannst oder nicht eher String-Funktionen wie instr() etc. nutzen solltest.


    Gruss
    Neni

  • Ick hab da mal was vorbereitet: http://crap.dgoersch.info/ls/RandomTest.exe


    Das Tool berechnet per Zufallsgenrator in einer Schleife einmal eine 8bit tiefe Zahl (0..255) und einmal die 8bits einzeln (0..1). Die Anzahl der Schleifendurchläufe sind in Tausenderschritten anzugeben, es wird gezählt wie oft jedes Bit gesetzt war.


    Auszug aus dem Code:


    MS scheint da nicht geschlampt zu haben, das Ergebnis ist bei mir ziemlich ausgewogen.

  • Sehr schön Domi :) , nette kleine Demo-Applikation :thumbup: .


    Und es zeigt eben ganz deutlich, dass wenn der Pseudozufallsgenerator gut implementiert ist, dann hat man ne Gleichverteilung der Werte und daraus folgend eben auch der Bits :) .


    Man mus natürlich die Bit-Auswertung auch noch korrekt implementieren, was ja hier gelungen ist ;) .


    Natürlich wird man in einem AVR niemals einen so guten Pseudozufallsgenerator implementieren können, zumindest nicht, wenn das arme Chipchen auch noch etwas anderes tun soll, als sekundenlang einen einzelnen Zufallswert zu berechnen.
    Da haben die modernen Super-Duper-Giga-Cores schon fast um astronomische Grössenordnungen mehr Performace unter der Haube, um eben auch entsprechend komplexe Algorithmen schnell genug abarbeiten zu können :) .


    Gruss
    Neni

  • So, ich habe jetzt meinen Laptop wieder da, und konnte endlich das Video in Beitrag 46 ansehen - das gefällt mir echt gut! :thumbup: - sieht gar nicht mal so "durcheinander" aus, "wabert" eher so hin und her... fast, wie wenn's extra so programmiert worden wäre, weil sich die "an"-LEDs ja schon meistens zu nem zusammenhängenden Klumpen zusammenballen...


    interessant wäre jetzt noch so was, dass vielleicht immer nur 1/3 der LEDs an sind, diese möglichst gleichmäßig verteilt und nie eine LED 2x hintereinander an - dass das eher so aussieht wie das Geperle in einer Sprudelflasche bzw. Flimmern der Glotze nach Sendeschluß..


    aber k.A., wie man das machen sollte...? - bin Mathemäßig ziemlich unbedarft... evtl. reicht's schon, wenn man obiges Muster deutlich schneller laufen lässt..??


    Wie auch immer, muss meine obige Meinung revidieren und das Gegenteil behaupten, ich kann mir das schon gut vorstellen, dass der Cube einfach dauerhaft mit dem Zufallsprogramm läuft - alle programmierten Sequenzen werden ja irgendwann auch mal langweilig wenn sich immer die selben wiederholen...


    Und zum Off-Topic: Ja, hier am Laptop ist definitv die obere Farbauswhl besser - das muss wohl echt an dem anderen Monitor liegen, dass der für CMYK eingestellt ist - da war damals jemand da mit so nem Colormeter, hat am Bildschirm rumgemessen und ein Profil erstellt - wie gesagt, für Druck passt er 1A, aber evtl. geht das nicht, dass es dann für RGB/Bildschirm gleichzeitig auch taugt, bzw. hat der das einfach vergessen..!?!


    (wobei das aber eigentlich nur für den Photoshop gilt, diese Kalibrierung - wenn ich die RGB-Bilder dann woanders (Browser etc.) ansehe, sind sie zumindest denen am PC ähnlicher - ganz gleich nicht, weil MacOS9 ein anderes Monitor-Gamma hat als PC...)

    It's only light - but we like it!


    Da es sich in letzter Zeit häuft: Ich beantworte keine PNs mit Fragen, die sich auch im Forum beantworten lassen!
    Insbesondere solche von Mitgliedern mit 0 Beiträgen, die dann meist auch noch Sachen fragen, die bereits im entsprechenden Thread beantwortet wurden.
    Ich bin keine private Bastler-Hotline, technische Tipps etc. sollen möglichst vielen Lesern im Forum helfen!

  • Naja es ist zwar etwas unlogisch, dass etwas nicht vorhandenes 1 ist, aber naja nicht definiert ist halt manchmal komisch. Du hast recht, es lag an der decbin Funktion, ich dachte halt, dass etwas, das nicht da ist, auch null ist. Und in Python kam aufgrund eines ähnlichen Fehlers immer fast dasselbe raus.


    Somit wäre alles wider logisch und die Welt wieder in Ordnung, und dennoch kann man in Bascom die 2^x Variante immernoch nutzen :)


    Sry für die ganze Aufregung ;) :thumbup:


    Hab auch etwas wenig geschlafen heute, also eigentlich noch gar nicht, werd ich dann gleichmal nachholen, sonst wär mir das sicher auch eher aufgefallen :D