random und safari....(???)
henry
- javascript
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
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
Sorry, hatte vergessen, auf abschicken zu klicken, und nicht gesehen, dass du schon geantwortet hattest.
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
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
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
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
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...;-)
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
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
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 gibt
s auch die gleichen Zufallszahlen).
(im firefox klappts... (?))
Der holt sich den Random-Seed vielleicht anders - die Ausfuehrungszeit
oder was weiss ich.
ciao,
xjs