<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// Dieser Artikel beschreibt, wie man es benutzt PHP Intern is_finite Vermeiden Sie bei der Funktionierung häufig auftretende Fehler,Und geben praktische Vorsichtsmaßnahmen und Vorschläge。</span></span><span>
</span><span><span class="hljs-meta">?></span></span><span>
<hr>
<h1>Wie man es vermeidet, es zu benutzen is_finite Bei der Beurteilungsfunktion trat ein unerwarteter Fehler auf?Was sind die Vorsichtsmaßnahmen??</h1>
<p>existieren PHP Programmierung,<code></span><span><span class="hljs-title function_ invoke__">is_finite</span></span><span>()
Empfehlung: Verwenden Sie vor dem Aufrufen von is_finite () is_numeric () oder geben Sie den Parameter zu einem rechtlichen numerischen Wert ein.
Während der Floating-Punkt-Operationen können einige illegale Operationen (z. B. Teilen durch Null, ungültige quadratische Vorschau usw.) NAN oder INF erzeugen, und sobald diese Werte an nachfolgenden Berechnungen beteiligt sind, werden sie die Ergebnisse häufig weiterhin "verschmutzen":
</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">// zurückkehren 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">// Trotzdem 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>
Empfehlung: Nach der Durchführung von Floating-Punkt-Berechnungen, insbesondere wenn Grenzwerte oder komplexe Formeln beteiligt sind, verwenden Sie is_nan () und is_infinite (), um die Ergebnisse mit is_finite () zu überprüfen.
is_finite () kann nicht zwischen positiver Unendlichkeit ( INF ) und negativer Unendlichkeit ( -inf ) unterscheiden, und beide geben falsch zurück . Wenn Sie ein feinkörnigeres Urteilsvermögen benötigen, können Sie is_infinite () und numerisches Urteilsvermögen kombinieren, um zu erreichen:
</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">// Negative Unendlichkeit</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">"Nur Unendlichkeit"</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">"Negative Unendlichkeit"</span></span><span>;
}
Schwimmpunkt -Implementierungen verschiedener Plattformen (z. B. 32 -Bit -System gegenüber 64 -Bit -Systemen) können dazu führen, dass derselbe numerische Betrieb unter bestimmten extremen Bedingungen unterschiedlich funktioniert, was das Urteil von IS_FINIT () beeinflusst. Darüber hinaus weist der Gleitkomma-Operation von PHP selbst Genauigkeitsbeschränkungen auf, und die Entwickler sollten bei der Bearbeitung von Grenzwerten besonders vorsichtig sein.
Vorschläge: Für Urteile, die extrem große oder extrem kleine Werte beinhalten, müssen Behauptungen oder Bereichsbeschränkungen hinzufügen, um zu vermeiden, dass die Genauigkeit von Floating-Point-Berechnungen selbst stützt.
is_finite () ist eine sehr praktische numerische Überprüfungsfunktion, aber keine "universelle Versicherung". Entwickler müssen ihre Prinzipien und Einschränkungen verstehen und mit geeignetem Vorurteilen und anschließender Verarbeitungslogik zusammenarbeiten, um einen robusten Datenverarbeitungsprozess zu erstellen. Denken Sie daran: Alle Daten von außen sind nicht vertrauenswürdig, und die Ergebnisse aller komplexen Berechnungen sind eine Überprüfung wert.