version 1.125, 2005/09/23 16:47:06
|
version 1.126, 2005/11/01 21:33:49
|
Line 119 sub setrandomnumber {
|
Line 119 sub setrandomnumber {
|
&Apache::lonxml::debug("randseed $rndseed"); |
&Apache::lonxml::debug("randseed $rndseed"); |
# $rndseed=unpack("%32i",$rndseed); |
# $rndseed=unpack("%32i",$rndseed); |
my $rand_alg=&Apache::lonnet::get_rand_alg(); |
my $rand_alg=&Apache::lonnet::get_rand_alg(); |
my $rndmod; |
my ($rndmod,$rndmod2); |
|
|
my ($id1,$id2,$shift_amt); |
my ($id1,$id2,$shift_amt); |
if ($Apache::lonhomework::parsing_a_problem) { |
if ($Apache::lonhomework::parsing_a_problem) { |
Line 133 sub setrandomnumber {
|
Line 133 sub setrandomnumber {
|
if (defined($Apache::bridgetask::instance[-1])) { |
if (defined($Apache::bridgetask::instance[-1])) { |
$id2=$Apache::bridgetask::instance[-1]; |
$id2=$Apache::bridgetask::instance[-1]; |
} |
} |
|
Apache->request->print("<p> $id1 $id2</p>"); |
$shift_amt=scalar(@Apache::bridgetask::instance); |
$shift_amt=scalar(@Apache::bridgetask::instance); |
} |
} |
&Apache::lonxml::debug("id1: $id1, id2: $id2, shift_amt: $shift_amt"); |
&Apache::lonxml::debug("id1: $id1, id2: $id2, shift_amt: $shift_amt"); |
Line 143 sub setrandomnumber {
|
Line 144 sub setrandomnumber {
|
} elsif ($rand_alg eq '64bit3') { |
} elsif ($rand_alg eq '64bit3') { |
$rndmod=(&Apache::lonnet::numval2($id1) << 10); |
$rndmod=(&Apache::lonnet::numval2($id1) << 10); |
if (defined($id2)) { $rndmod+=&Apache::lonnet::numval2($id2); } |
if (defined($id2)) { $rndmod+=&Apache::lonnet::numval2($id2); } |
} else { |
} elsif ($rand_alg eq '64bit4') { |
my $shift=(4*$shift_amt)%30; |
my $shift=(4*$shift_amt)%30; |
$rndmod=(&Apache::lonnet::numval3($id1) << (($shift+15)%30)); |
$rndmod=(&Apache::lonnet::numval3($id1) << (($shift+15)%30)); |
if (defined($id2)) { |
if (defined($id2)) { |
$rndmod+=(&Apache::lonnet::numval3($id2) << $shift ); |
$rndmod+=(&Apache::lonnet::numval3($id2) << $shift ); |
} |
} |
|
} else { |
|
($rndmod,$rndmod2)=&Apache::lonnet::digest("$id1,$id2"); |
|
|
} |
} |
if ($rndseed =~/([,:])/) { |
if ($rndseed =~/([,:])/) { |
my $char=$1; |
my $char=$1; |
use integer; |
use integer; |
my ($num1,$num2)=split(/\Q$char\E/,$rndseed); |
my ($num1,$num2)=split(/\Q$char\E/,$rndseed); |
$num1+=$rndmod; |
$num1+=$rndmod; |
$num2+=$rndmod; |
$num2+= ((defined($rndmod2)) ? $rndmod2 : $rndmod); |
if($Apache::lonnet::_64bit) { $num1=(($num1<<32)>>32); $num2=(($num2<<32)>>32); } |
if($Apache::lonnet::_64bit) { $num1=(($num1<<32)>>32); $num2=(($num2<<32)>>32); } |
$rndseed=$num1.$char.$num2; |
$rndseed=$num1.$char.$num2; |
} else { |
} else { |