Maison  >  Article  >  développement back-end  >  Pratique des fonctions mathématiques PHP 5 : obtenir des nombres à virgule flottante aléatoires

Pratique des fonctions mathématiques PHP 5 : obtenir des nombres à virgule flottante aléatoires

藏色散人
藏色散人original
2021-08-26 09:16:502186parcourir

Aujourd'hui, nous continuerons à vous proposer le contenu de la série de pratiques sur les fonctions mathématiques PHP, qui vous a été présentée dans l'article précédent "Pratique 4 sur les fonctions mathématiques PHP : arrondir les nombres à virgule flottante de zéro au nombre spécifié de décimales" Les amis dans le besoin peuvent apprendre à arrondir un nombre à virgule flottante de zéro à un nombre spécifié de décimales~

Le thème de cet article est de vous apprendre à écrire une fonction PHP pour obtenir un nombre à virgule flottante aléatoire.

Tout d'abord, permettez-moi de vous donner une brève introduction à ce que sont les nombres à virgule flottante. Les nombres à virgule flottante sont également appelés nombres à double précision ou nombres réels. Ils peuvent être définis en PHP en utilisant l'une des syntaxes suivantes :

<?php
$a = 1.234; 
$b = 1.2e3; 
$c = 7E-10;
$d = 1_234.567; // 从 PHP 7.4.0 开始支持
?>

. Je vais maintenant présenter directement la méthode d'implémentation pour obtenir des nombres à virgule flottante aléatoires :

L'exemple de code PHP est le suivant :

<?php
function rand_float($st_num=0,$end_num=1,$mul=1000000)
{
    if ($st_num>$end_num) return false;
    return mt_rand($st_num*$mul,$end_num*$mul)/$mul;
}
echo rand_float()."<br>";
echo rand_float(0.6)."<br>";
echo rand_float(0.5,0.6)."<br>";
echo rand_float(0,20)."<br>";
echo rand_float(0,3,2)."<br>";
echo rand_float(0,2,20)."<br>";
?>

Le résultat de sortie est :

0.353804
0.715058
0.598421
13.484704
0.5
1.4

L'effet de l'opération de rafraîchissement est le suivant :

GIF 2021-8-26 星期四 上午 9-11-35.gif

Comme indiqué ci-dessus, nous pouvons obtenir des nombres aléatoires à virgule flottante.

Ici, je vous présente une fonctionmt_randfonction :

La fonction mt_rand() utilise l'algorithme Mersenne Twister pour générer des entiers aléatoires.

Cette fonction est un meilleur choix pour générer des valeurs aléatoires, renvoyant des résultats 4 fois plus rapidement que la fonction rand() ; si vous voulez un entier aléatoire entre 10 et 100 (inclus), utilisez mt_rand(10,100).

La syntaxe est la suivante :

mt_rand();
or
mt_rand(min,max);

La valeur de retour est un entier aléatoire compris entre min (ou 0) et max (ou mt_getrandmax()) (y compris les valeurs limites). Si max < min renvoie FALSE.

注:浮点数的精度
浮点数的精度有限。尽管取决于系统,PHP 通常使用 IEEE 754 双精度格式,则由于取整而导致的最大相对误差为 1.11e-16。非基本数学运算可能会给出更大误差,并且要考虑到进行复合运算时的误差传递。
此外,以十进制能够精确表示的有理数如 0.1 或 0.7,无论有多少尾数都不能被内部所使用的二进制精确表示,因此不能在不丢失一点点精度的情况下转换为二进制的格式。这就会造成混乱的结果:例如,floor((0.1+0.7)*10) 通常会返回 7 而不是预期中的 8,因为该结果内部的表示其实是类似 7.9999999999999991118...。
所以永远不要相信浮点数结果精确到了最后一位,也永远不要比较两个浮点数是否相等。如果确实需要更高的精度,应该使用任意精度数学函数或者 gmp 函数。

La plate-forme de site Web PHP chinois propose de nombreuses ressources pédagogiques vidéo. Bienvenue à tous pour apprendre le "Tutoriel vidéo PHP" !

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn