Le principe mathématique de la fonction asin () détermine qu'il accepte uniquement les valeurs entre -1 et 1 comme entrée. Si la valeur d'entrée est inférieure à -1 ou supérieure à 1, PHP renvoie NAN et aucune erreur n'est déclenchée. Par conséquent, avant d'appeler la fonction asin () , assurez-vous que les paramètres d'entrée sont valides, il est généralement fait pour vérifier que la valeur d'entrée se situe dans la plage juridique.
<span><span><span class="hljs-variable">$value</span></span><span> = </span><span><span class="hljs-number">1.2</span></span><span>;
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$value</span></span><span> < -</span><span><span class="hljs-number">1</span></span><span> || </span><span><span class="hljs-variable">$value</span></span><span> > </span><span><span class="hljs-number">1</span></span><span>) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"La valeur d'entrée est en dehors de la plage juridique!"</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-title function_ invoke__">asin</span></span><span>(</span><span><span class="hljs-variable">$value</span></span><span>);
}
</span></span>
Cette vérification peut éviter de passer des valeurs illégales directement à la fonction ASIN () .
Les nombres de points flottants en PHP sont parfois affectés par les problèmes de précision, en particulier lors de la comparaison et de la comparaison des nombres de points flottants. Dans certains cas, les résultats du calcul peuvent avoir de légères erreurs, provoquant une valeur qui devrait être dans la plage juridique pour devenir une valeur hors de portée, déclenchant un retour NAN .
Par exemple, considérez le code suivant:
<span><span><span class="hljs-variable">$value</span></span><span> = </span><span><span class="hljs-number">1</span></span><span> + </span><span><span class="hljs-number">1e-15</span></span><span>; </span><span><span class="hljs-comment">// En raison de la précision flottante,Probablement plus de 1</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title function_ invoke__">asin</span></span><span>(</span><span><span class="hljs-variable">$value</span></span><span>);
</span></span>
Bien que 1 + 1E-15 semble être une valeur juridique, il peut en fait dépasser la plage valide en raison de l'influence de la précision flottante, ce qui fait que Asin () renvoie NAN .
La solution à ce problème est d'éviter cette erreur de précision en définissant une plage de précision appropriée ou en utilisant la fonction rond () .
<span><span><span class="hljs-variable">$value</span></span><span> = </span><span><span class="hljs-title function_ invoke__">round</span></span><span>(</span><span><span class="hljs-number">1</span></span><span> + </span><span><span class="hljs-number">1e-15</span></span><span>, </span><span><span class="hljs-number">15</span></span><span>); </span><span><span class="hljs-comment">// S'assurer que la précision ne dépasse pas la plage</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title function_ invoke__">asin</span></span><span>(</span><span><span class="hljs-variable">$value</span></span><span>);
</span></span>
Si vous utilisez ASIN () dans un programme plus complexe et que vous retournez NAN , vous pouvez davantage résoudre le problème par le débogage et la journalisation. En enregistrant la valeur d'entrée transmise à la fonction asin () à chaque fois, la cause profonde de l'erreur peut être tracée plus facilement.
<span><span><span class="hljs-variable">$value</span></span><span> = </span><span><span class="hljs-number">1.2</span></span><span>;
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$value</span></span><span> < -</span><span><span class="hljs-number">1</span></span><span> || </span><span><span class="hljs-variable">$value</span></span><span> > </span><span><span class="hljs-number">1</span></span><span>) {
</span><span><span class="hljs-title function_ invoke__">error_log</span></span><span>(</span><span><span class="hljs-string">"asin La valeur d'entrée est hors de portée: <span class="hljs-subst">$value</span></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-title function_ invoke__">asin</span></span><span>(</span><span><span class="hljs-variable">$value</span></span><span>);
}
</span></span>
Les journaux peuvent vous aider à localiser rapidement les problèmes d'entrée, en particulier lors du traitement des entrées des utilisateurs ou de la réception de données à partir de sources de données externes.
Si la valeur d'entrée de la fonction ASIN () provient d'une source de données externe (comme une base de données, une API ou une entrée utilisateur), vous devez assurer l'exactitude de ces données. Parfois, les sources de données externes peuvent contenir des valeurs non valides, ce qui fait que la fonction ASIN () renvoie NAN .
Par exemple, lors de la récupération des données d'une base de données, il peut y avoir une valeur illégale qui fait échouer le calcul:
<span><span><span class="hljs-variable">$query</span></span><span> = </span><span><span class="hljs-string">"SELECT value FROM table WHERE id = 1"</span></span><span>;
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">mysqli_query</span></span><span>(</span><span><span class="hljs-variable">$conn</span></span><span>, </span><span><span class="hljs-variable">$query</span></span><span>);
</span><span><span class="hljs-variable">$row</span></span><span> = </span><span><span class="hljs-title function_ invoke__">mysqli_fetch_assoc</span></span><span>(</span><span><span class="hljs-variable">$result</span></span><span>);
</span><span><span class="hljs-variable">$value</span></span><span> = </span><span><span class="hljs-variable">$row</span></span><span>[</span><span><span class="hljs-string">'value'</span></span><span>];
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$value</span></span><span> < -</span><span><span class="hljs-number">1</span></span><span> || </span><span><span class="hljs-variable">$value</span></span><span> > </span><span><span class="hljs-number">1</span></span><span>) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"La valeur renvoyée par la base de données n'est pas valide: <span class="hljs-subst">$value</span></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-title function_ invoke__">asin</span></span><span>(</span><span><span class="hljs-variable">$value</span></span><span>);
}
</span></span>
À ce stade, s'assurer que vous avez correctement vérifié l'entrée externe, ce qui peut éviter efficacement le problème du retour NAN .
Pour certains programmes plus complexes, il peut être souhaitable de gérer les valeurs de retour NAN plus gracieusement au lieu de vérifier directement les valeurs d'entrée. Dans ce cas, le mécanisme de gestion des exceptions de PHP peut être utilisé pour capturer et gérer la situation de retour NAN .
<span><span><span class="hljs-keyword">try</span></span><span> {
</span><span><span class="hljs-variable">$value</span></span><span> = </span><span><span class="hljs-number">1.5</span></span><span>;
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">asin</span></span><span>(</span><span><span class="hljs-variable">$value</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">is_nan</span></span><span>(</span><span><span class="hljs-variable">$result</span></span><span>)) {
</span><span><span class="hljs-keyword">throw</span></span><span> </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-built_in">Exception</span></span><span>(</span><span><span class="hljs-string">"Le résultat du calcul est NaN,Valeur d'entrée non valide"</span></span><span>);
}
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$result</span></span><span>;
} </span><span><span class="hljs-keyword">catch</span></span><span> (</span><span><span class="hljs-built_in">Exception</span></span><span> </span><span><span class="hljs-variable">$e</span></span><span>) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">'Error: '</span></span><span> . </span><span><span class="hljs-variable">$e</span></span><span>-></span><span><span class="hljs-title function_ invoke__">getMessage</span></span><span>();
}
</span></span>
Grâce à la gestion des exceptions, les erreurs peuvent être capturées et enregistrées lorsque NAN se produit, en évitant le crash direct du programme.
Lorsque vous utilisez la fonction ASIN () , le problème du retour NAN est généralement causé par une valeur d'entrée non valide en cours de réalisation. Voici quelques meilleures pratiques:
Vérifiez la plage d'entrée : assurez-vous que les valeurs d'entrée sont entre [-1, 1].
Gérer les problèmes de précision flottante : utilisez Round () ou d'autres méthodes pour réduire les erreurs de points flottants.
Journalisation et débogage : enregistrer les valeurs d'entrée entrantes pour faciliter le dépannage.
Vérifiez les sources de données externes : effectuez des vérifications de validité pour les données de la base de données ou de l'API.
Gestion des exceptions : utilisez la structure de capture d'essai pour attraper gracieusement et gérer les erreurs.
Grâce à ces méthodes, vous pouvez éviter efficacement et résoudre le problème de la fonction ASIN () qui renvoie NAN , assurant la robustesse et la stabilité du programme.