Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]6767[/thread]

Unterschiedl. rand-Ergebnisse auf Windows u. Linux



<< >> 9 Einträge, 1 Seite
Gast Gast
 2005-03-08 09:44
#52408 #52408
Folgender Output kommt aus einem perl-skript, welches mit dem ausgegebenen srand-Wert 8 mal rand(61) ausgibt.
Die Perl Version ist auf beiden Systemen gleich.

Windows XP SP2:
seedval: 95558 i: 31 i: 44 i: 7 i: 29 i: 37 i: 29 i: 47 i: 28

SuSE Linux 2.4.21:
seedval: 95558 i: 18 i: 0 i: 29 i: 6 i: 39 i: 13 i: 41 i: 42

Da für meine Zwecke diese Pseudozufallszahlen gleich sein sollten, ist das grad etwas hinderlich :(
Kann ich irgendwas dagegen tun, ist das ein "Problem", oder ist das gewollt?

Danke für eure Hilfe, Dominik
kabel
 2005-03-08 12:08
#52409 #52409
User since
2003-08-04
704 Artikel
BenutzerIn
[default_avatar]
also du hast das gleiche skript einmal auf einem win und einmal auf einer linux kiste gestartet und dann kamen unterschiedliche ergebnisse raus?

Code (perl): (dl )
1
2
3
#!/usr/bin/perl -w
srand( 95558 );
print int rand( 61 ), " " for 1 .. 8;


Quote
You can call srand($seed) with the same $seed to reproduce the same sequence from rand(), but this is usually reserved for generating predictable results for testing or debugging. Otherwise, don't call srand() more than once in your program.


rieche ich da einen bug?
jedenfalls steht da nichts von plattformabhängigkeit.
-- stefan
GwenDragon
 2005-03-08 12:13
#52410 #52410
User since
2005-01-17
14745 Artikel
Admin1
[Homepage]
user image
[quote=Guest,08.03.2005, 08:44]Da für meine Zwecke diese Pseudozufallszahlen gleich sein sollten, ist das grad etwas hinderlich :(
Kann ich irgendwas dagegen tun, ist das ein "Problem", oder ist das gewollt?[/quote]
Häh, Zufallszahlen sollen auf beiden System gleich sein? Was sind denn das dann für ZUFALLszahlen?
Natürlich sind sie unterschiedlich. Das soll so sein! Ein Zufallsgenetaror sollte nie gleiche Zahlen liefern, egal auf welchem System.
renee
 2005-03-08 12:22
#52411 #52411
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
@GwenDragon: Nein, mit srand kannst Du die Basis für die Berechnung der Zufallszahlen angeben. Und wenn Du da einen konstanten Wert drin hast, dann kommen immer die gleichen "Zufallszahlen" dabei raus...
"Zufallszahlen" sind halt doch nicht wirklich zufällig...

siehe perldoc -f srand

Probier mal:
Code: (dl )
1
2
3
4
5
6
7
8
9
#! /usr/bin/perl

use strict;
use warnings;

srand(95558);
for(0..7){
print rand(61),"\n";
}


@Dominik: Bei mir kommen hier die gleichen Zahlen raus wie bei Dir (SuSE 9.2). Win werde ich heute abend testen...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
esskar
 2005-03-08 13:08
#52412 #52412
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
und ich kann die XP Zahlen bestätigen.
An der Stelle wird aber wohl die Betriebssystem eigene rand und srand funktion benutzt. Die sind wohl auf den Systemen unterschiedlich!
Taulmarill
 2005-03-08 13:20
#52413 #52413
User since
2004-02-19
1750 Artikel
BenutzerIn

user image
ich denke das hat was mit POSIX vs. Win32 zu tun.
auf Win2k bekomm ich die XP zahlen. auf Solaris9 SPARC und Mac OS X Panther (G4 Prozessor) bekomm ich die SuSE zahlen.
$_=unpack"B*",~pack"H*",$_ and y&1|0& |#&&print"$_\n"for@.=qw BFA2F7C39139F45F78
0A28104594444504400 0A2F107D54447DE7800 0A2110453444450500 73CF1045138445F4800 0
F3EF2044E3D17DE 8A08A0451412411 F3CF207DF41C79E 820A20451412414 83E93C4513D17D2B
ptk
 2005-03-08 19:56
#52414 #52414
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
FreeBSD liefert: 51 56 59 47 58 28 46 50
Wer einen Sourceforge-Account hat, kann ja mal die Rechner auf compilefarm.sourceforge.net durchtesten.
betterworld
 2005-03-08 21:59
#52415 #52415
User since
2003-08-21
2614 Artikel
ModeratorIn

user image
Also SunOS 5.8, perl-5.005 gibt dieselben Zahlen wie ptk fuer FreeBSD sagte:
Code: (dl )
51 56 59 47 58 28 46 50

aber mein FreeBSD 5.2.1, perl-5.6.1 gibt aus:
Code: (dl )
18 0 29 6 39 13 41 42

und Linux, Perl-5.8.4 dasselbe.

Ich denke mal, dass es einfach von der Perl-Version abhängt. Und wie die Manpage auch schon aussagt, kann man sich höchstens darauf verlassen, dass ein und dasselbe Programm zweimal hintereinander bei demselben Seed auch dieselben Zahlen ausgibt. Aber niemand verbietet den Perl-Entwicklern, im Laufe der Versionen den Algorithmus zu ändern. Wenn Du derartige Zuverlässigkeit haben möchtest, solltest Du nach entsprechenden Bibliotheken suchen.

Edit: C&P-Fehler\n\n

<!--EDIT|betterworld|1110312030-->
pKai
 2005-03-08 23:16
#52416 #52416
User since
2005-02-18
357 Artikel
BenutzerIn
[default_avatar]
[quote=Guest,08.Mar..2005, 08:44]Windows XP SP2:
seedval: 95558 i: 31 i: 44 i: 7 i: 29 i: 37 i: 29 i: 47 i: 28[/quote]
dito mit
"This is perl, v5.6.1 built for MSWin32-x86-multi-thread...
Binary build 638 provided by ActiveState Corp. ..."

auf Win98SE :ghostface:

Würde zumindest für einheitliche API calls unter Win32 sprechen.
I sense a soul in search of answers.
<< >> 9 Einträge, 1 Seite



View all threads created 2005-03-08 09:44.