henry: random und safari....(???)

hallo

wenn ich in einem headskript

"var ran_unrounded=Math.random()*10;
alert (ran_unrounded);"

eingebe und das ganze in safari teste, wird jedesmal die zahl
0.00007826369259425611
ausgegeben. jedenfalls wenn ich beim safari den cache lösche und in neu starte...
wenn ich den cache nicht leere, funktionierts und es wird jedesmal eine andere zahl ausgegeben. hat jemand eine ahnung was hier vor sich geht?

(im firefox klappts... (?))

gruss

henry

  1. hi,

    wenn ich in einem headskript

    "var ran_unrounded=Math.random()*10;
    alert (ran_unrounded);"

    eingebe und das ganze in safari teste, wird jedesmal die zahl
    0.00007826369259425611
    ausgegeben.

    Computer "können" keinen echten Zufall, sondern nehmen sich immer ein paar im System existierende Werte, rechnen damit ein bisschen rum, und präsentieren das Ergebnis als "Zufallszahl".
    Diese Eingangswerte nennt man auch Seed, die "Saat" des Zufalls. Früher müsste man so einen Zufallszahlengenerator meist noch mit irgendetwas möglichst zufälligem (Systemzeit in Millisekunden, Speicherinhalte, ...) initialisieren, heute kann das bei den meisten Implementierungen entfallen, wird automatisch gemacht.

    jedenfalls wenn ich beim safari den cache lösche und in neu starte...
    wenn ich den cache nicht leere, funktionierts und es wird jedesmal eine andere zahl ausgegeben. hat jemand eine ahnung was hier vor sich geht?

    Vielleicht nutzt Safari Cache-Inhalte, um seinen Javascript-Zufallsgenerator zu initialisieren?
    In der Annahme, dass sich darin üblicherweise etwas befinden dürfte, und dass dies von Nutzer zu Nutzer reichlich verschieden sein dürfte.

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
    1. Sorry, hatte vergessen, auf abschicken zu klicken, und nicht gesehen, dass du schon geantwortet hattest.

    2. hallo wahsaga!
      ja klar, "echter zufall" gibts natürlich nicht. dass safari das javascript random anders interpretiert als firefox finde ich aber sehr merkwürdig...
      irgendwie kann ich das nicht so recht glauben, bis mir jemand das gegenteil beweist...

      also falls hier jemand den safari hat:

      bitte kurze testen:
      var ran_unrounded=Math.random()*10;

      alert (ran_unrounded);"

      wenn die zahl anders ist als
      0.00007826369259425611
      wäre das bewiesen...

      thx

      gruss
      marc

      1. Hello out there!

        dass safari das javascript random anders interpretiert als firefox finde ich aber sehr merkwürdig...

        Tut er doch nicht. Er liefert eine Pseudozufallszahl aus dem Intervall [0, 1[ zurück.

        Die Methode ist lediglich anders implementiert.

        See ya up the road,
        Gunnar

        --
        „Wer Gründe anhört, kommt in Gefahr nachzugeben.“ (Goethe)
        1. hallo
          also wenn die zahl
          0.00007826369259425611 nur bei mir dauernd auftaucht, dann wird der safari wohl irgendwelche daten bei mir im system holen. das wäre ja ok. doch wenn irgendwelche standardwerte des browsers verwendet werden, dann wäre die zahl auch bei allen anderen safari anwendern am anfang die gleiche. das wäre weniger gut, sprich unbrauchbar....

          gruss
          henry

          1. Hi,

            ja, echte Zufallszahlen kann ein Computer nur durch spezielle Hardware erhalten. Ein gängiges Verfahren hierzu ist es, die Hintergrundgeräusche zu messen und in irgend einer Form zu quantifizieren. Es gibt nur vergleichsweise wenige Anwendungsfälle, in denen so etwas nötig ist.

            also wenn die zahl 0.00007826369259425611 nur bei mir dauernd auftaucht, dann wird der safari wohl irgendwelche daten bei mir im system holen. das wäre ja ok.

            Safari verwendet einen Wert, den die Entwickler als im Sinne der Use-Cases möglich zufällig empfanden.

            doch wenn irgendwelche standardwerte des browsers verwendet werden,

            Du hast einen Zusammenhang zum Browser-Cache entdeckt; und wenn ich Dich richtig verstanden habe, sind die Ergebnisse im Falle eines nicht geleerten Caches anders. Frage:

            Inwieweit ist es ein Use-Case, dass der Benutzer auf eine Seite gelangt (die eine Zufallszahl produziert) und dabei einen leeren Cache besitzt?

            Ich kann mir nicht helfen, aber bei mir geschieht das vergleichsweise selten. Da zudem der Inhalt des Browser-Caches weitgehend abhängig von externer Hardware ist - um genau zu sein von einer biologischen Komponente namens "Mensch" - halte ich die Wahl, den Cache als Basis für den Seed zu verwenden, für einen ziemlich intelligenten Gedanken.

            Cheatah

            --
            X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
            X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
            X-Will-Answer-Email: No
            X-Please-Search-Archive-First: Absolutely Yes
            1. hi
              noch etwas genauer zum safari-problem:
              wenn die seite bereits im cache drin ist, ist alles ok. wenn die seite aber zum ersten mal geladen wird, (egal ob der cache leer oder voll ist) wird immer die gleiche zahl ausgegeben. d.h. mit der grösse des cache kann es eigentlich nicht zu tun haben.
              die frage bleibt, ob diese zahl abhängig von meinem system ist oder nicht. wenn alle safari-benutzer die gleiche zahl beim ersten mal erhalten finde ich das nicht so intelligent...

              ich habe mir zur abhilfe mit getMilliseconds ausgeholfen. dies ergibt eine zahl zwischen 0 und 999. geteilt durch 1000 mal die anzahl zahlen die gebraucht werden und gerundet funktioniert das einwandfrei. natürlich ist dies noch viel weniger eine zufallszahl, doch diese zahl kann ich wenigstens nicht voraussagen...;-)

      2. hi,

        also falls hier jemand den safari hat:

        bitte kurze testen:
        var ran_unrounded=Math.random()*10;

        alert (ran_unrounded);"

        wenn die zahl anders ist als
        0.00007826369259425611
        wäre das bewiesen...

        Was sollte dann bewiesen sein?

        Der Cache-Inhalt muss ja nicht die einzige Größe sein, die in die Initialisierung einfliesst.

        Nein, das würde m.E. gar nichts beweisen.

        Höchstens, ob auch andere bei geleertem Cache reproduzierbar immer gleiche Werte bekommen, wäre interessant.

        gruß,
        wahsaga

        --
        /voodoo.css:
        #GeorgeWBush { position:absolute; bottom:-6ft; }
      3. also falls hier jemand den safari hat:

        var ran_unrounded=Math.random()*10;
        alert (ran_unrounded);

        → javascript:alert(Math.random()*10);

        0.00007826369259425611

        Das ist auch bei mir das Ergebnis. Der zweite Wert ist reproduzierbar 1.3153778814316626 usw. usf. Positiv getestet mit Safari 1.0, 2.0 und 2.0.4.

        Erst die aktuelle WebKit-Version (419.3) bringt vom Start weg „echte“ Zufallszahlen.

        Roland

        --
        -)
  2. Hi!

    eingebe und das ganze in safari teste, wird jedesmal die zahl
    0.00007826369259425611
    ausgegeben. jedenfalls wenn ich beim safari den cache lösche und in neu starte...
    wenn ich den cache nicht leere, funktionierts und es wird jedesmal eine andere zahl ausgegeben. hat jemand eine ahnung was hier vor sich geht?

    Safari setzt wahrscheinlich einen festen Random-Seed abhaengig von der
    Cache-Groesse (falls dus nicht weisst, der Random-Seed ist eine Zahl, aus der der Computer viele zufallszahlen erzeugen kann - aber bei gleichem Random-Seed gibts auch die gleichen Zufallszahlen).

    (im firefox klappts... (?))

    Der holt sich den Random-Seed vielleicht anders - die Ausfuehrungszeit
    oder was weiss ich.

    ciao,
    xjs

    --
    http://xjs.itisme.org
    linux is like a wigwam: no windows, no gates and an apache inside!
    Selfcode: sh:( fo:| ch:| rl:° br:> n4:| ie:{ mo:} va:) de:> zu:) fl:) ss:{ ls:& js:|