Beibehaltung der Präzision bei Berechnungen großer Zahlen in PHP
PHP kann bei Berechnungen mit extrem großen ganzen Zahlen auf Präzisionsprobleme stoßen. Dies kann problematisch werden, wenn Techniken wie die modulare Potenzierung verwendet werden, wie im Fermat-Primalitätstest.
Das Float-Rätsel
Die Multiplikation zweier großer Ganzzahlen kann zu einem Wert führen, der wird in PHP automatisch in einen Float umgewandelt. Dies kann zu falschen Modulberechnungen führen, wie unten gezeigt:
$x = 62574 * 62574; var_dump($x); // float(3915505476) ... correct var_dump($x % 104659); // int(-72945) ... incorrect
Eine Lösung
PHP bietet zwei externe Bibliotheken zur Verarbeitung großer Zahlen: BC Math und GMP. GMP bietet eine umfassendere API, die Präzision auch bei außergewöhnlich großen Werten gewährleistet.
Verwendung von GMP
GMP kann zur Darstellung beliebiger Präzisionszahlen verwendet werden. Wie in der bereitgestellten Antwort zu sehen ist, können benutzerdefinierte Klassen wie Decimal2 erstellt werden, um Berechnungen großer Zahlen zu erleichtern und Funktionen wie Rundung und Modulberechnung bereitzustellen.
// Using the GMP library $bignum = gmp_init('62574'); // Initialize GMP number $product = gmp_mul($bignum, $bignum); // Multiply using GMP $modulus = gmp_mod($product, 104659); // Calculate modulus using GMP echo gmp_strval($modulus); // Output the correct modulus value
Diese Methode stellt die Berechnung und Verarbeitung großer Zahlen mit den erforderlichen Funktionen sicher Präzision, vermeiden Sie mögliche Genauigkeitsverluste.
Das obige ist der detaillierte Inhalt vonWie kann PHP die Präzision bei Berechnungen mit extrem großen ganzen Zahlen aufrechterhalten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!