<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// Cet article décrit comment l'utiliser PHP Interne is_finite Évitez les erreurs courantes lors du fonctionnement,Et fournir des précautions et des suggestions pratiques。</span></span><span>
</span><span><span class="hljs-meta">?></span></span><span>
<hr>
<h1>Comment éviter de l'utiliser is_finite Une erreur inattendue s'est produite lors de la fonction de jugement?Quelles sont les précautions?</h1>
<p>exister PHP Programmation,<code></span><span><span class="hljs-title function_ invoke__">is_finite</span></span><span>()
Recommandation: Avant d'appeler IS_FINITE () , utilisez IS_NUMERIC () ou tapez pour forcer le paramètre à être une valeur numérique légale.
Pendant les opérations à virgule flottante, certaines opérations illégales (comme la division par zéro, un aperçu carré non valide, etc.) peuvent générer du NAN ou de l'inf , et une fois que ces valeurs participent à des calculs ultérieurs, ils continueront souvent de "polluer" les résultats:
</span><span><span class="hljs-variable">$a</span></span><span> = </span><span><span class="hljs-title function_ invoke__">acos</span></span><span>(</span><span><span class="hljs-number">2</span></span><span>); </span><span><span class="hljs-comment">// retour NAN</span></span><span>
</span><span><span class="hljs-variable">$b</span></span><span> = </span><span><span class="hljs-variable">$a</span></span><span> * </span><span><span class="hljs-number">10</span></span><span>; </span><span><span class="hljs-comment">// Toujours NAN</span></span><span>
</span><span><span class="hljs-title function_ invoke__">var_dump</span></span><span>(</span><span><span class="hljs-title function_ invoke__">is_finite</span></span><span>(</span><span><span class="hljs-variable">$b</span></span><span>)); </span><span><span class="hljs-comment">// false</span></span><span>
Recommandation: Après avoir effectué des calculs à virgule flottante, en particulier lorsque des valeurs limites ou des formules complexes sont impliquées, utilisez is_nan () et is_infinite () pour vérifier les résultats avec is_finite () .
is_finite () ne peut pas distinguer l'infini positif ( inf ) et l'infini négatif ( -inf ), et ils reviennent tous les deux faux . Si vous avez besoin d'un jugement plus fin, vous pouvez combiner is_infinite () et jugement numérique à réaliser:
</span><span><span class="hljs-variable">$x</span></span><span> = </span><span><span class="hljs-title function_ invoke__">log</span></span><span>(</span><span><span class="hljs-number">0</span></span><span>); </span><span><span class="hljs-comment">// Infinity négatif</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">is_infinite</span></span><span>(</span><span><span class="hljs-variable">$x</span></span><span>)) {
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$x</span></span><span> > </span><span><span class="hljs-number">0</span></span><span>) </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Juste l'infini"</span></span><span>;
</span><span><span class="hljs-keyword">else</span></span><span> </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Infinity négatif"</span></span><span>;
}
Les implémentations de points flottants de différentes plates-formes (telles que les systèmes 32 -bits vs 64 bits) peuvent faire fonctionner le même opération numérique différemment dans certaines conditions extrêmes, ce qui affecte le jugement d' Is_finite () . De plus, le fonctionnement à virgule flottante de PHP lui-même a des limites de précision, les développeurs doivent être très prudents lorsqu'ils traitent des valeurs limites.
Suggestions: Pour les jugements impliquant des valeurs extrêmement grandes ou extrêmement petites, ajoutez des affirmations ou des limitations de plage pour éviter de s'appuyer sur la précision des calculs à point flottant eux-mêmes.
IS_FINITE () est une fonction de vérification numérique très pratique, mais ce n'est pas une "assurance universelle". Les développeurs doivent comprendre ses principes et ses limites, et coopérer avec la logique de traitement préalable et de traitement ultérieure appropriée pour créer un processus de traitement des données robuste. N'oubliez pas: toutes les données de l'extérieur sont indignes de confiance et les résultats de tous les calculs complexes méritent d'être vérifiés.