diff --git a/Irpg/Event.pm b/Irpg/Event.pm
index 5e964cae8fe554bc6a1a700bd3e78abdff78fbc2..844099554a1d480f1ffc0dd51b32fd73b7421cb0 100644
--- a/Irpg/Event.pm
+++ b/Irpg/Event.pm
@@ -180,7 +180,9 @@ sub choose_player {
 	@players = @levels{sort keys %levels};
 
     #exponential distribution on levels (lambda = 0.5)
-	@players = @{$players[-log(rand) / 0.5]};
+	my $rand_val = $#players+1;
+	$rand_val = int(-log(rand) / 0.5) while ($rand_val > $#players);
+	@players = @{$players[$rand_val]};
 	#then uniform distribution for players of the same level
 	return $players[rand(@players)];
 }