Quelques explications, sur la modification de la fonction originelle :
// ----- Code originel ----- //
function RandomRange(const AFrom, ATo: Integer): Integer;
begin
if AFrom > ATo then
Result := Random(AFrom - ATo) + ATo
else
Result := Random(ATo - AFrom) + AFrom;
end;
Supposons que Afrom=2 et ATo=3, dans ce cas, on aura Random(3-2)+2 soit Random(1)+2
0 <= Random(X) < X
0 <= Random(1) < 1
2 <= Random(1)+2 < 3, la fonction RandomRange ne renverra que des 2 !!!!
Supposons que Afrom=1 et ATo=5, dans ce cas, on aura Random(5-1)+1 soit Random(4)+1
0 <= Random(X) < X
0 <= Random(4) < 4
1 <= Random(4)+1 < 5, la fonction RandomRange renverra des nombres compris entre 1 et 4 !!!! et non 1 et 5
Pour utiliser le correctif, soit vous recompilez l'unité Math.pas en modifiant la source (pour ceux qu'ils l'ont), soit vous intégrez ce code dans une autre unité, par exemple CorrectifMath.pas (fichier joint)
L'appel de la fonction se fera en incluant l'unité dans la clause uses, puis en spécifiant au compilateur l'unité à utiliser :
RandomRange(1,5); // Appel de la fonction originelle
Math.RandomRange(1,5)); // Appel de la fonction originelle
CorrectifMath.RandomRange(1,5)); // Appel de la fonction corrigée
Cordialement.