Maison >développement back-end >tutoriel php >Comment PHP peut-il maintenir la précision lors de calculs avec des entiers extrêmement grands ?

Comment PHP peut-il maintenir la précision lors de calculs avec des entiers extrêmement grands ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-13 19:12:11962parcourir

How Can PHP Maintain Precision When Calculating with Extremely Large Integers?

Préserver la précision dans les calculs de grands nombres en PHP

PHP peut rencontrer des problèmes de précision lors de l'exécution de calculs sur des entiers extrêmement grands. Cela peut devenir problématique lors de l'utilisation de techniques telles que l'exponentiation modulaire, comme dans le test de primalité de Fermat.

L'énigme du flotteur

La multiplication de deux grands entiers peut donner une valeur qui est automatiquement converti en float en PHP. Cela peut conduire à des calculs de module incorrects, comme démontré ci-dessous :

$x = 62574 * 62574;
var_dump($x); // float(3915505476) ... correct
var_dump($x % 104659); // int(-72945)  ... incorrect

Une solution

PHP propose deux bibliothèques externes pour gérer les grands nombres : BC Math et GMP. GMP fournit une API plus complète, garantissant la précision même pour des valeurs exceptionnellement grandes.

Utilisation de GMP

GMP peut être utilisé pour représenter des nombres de précision arbitraires. Comme le montre la réponse fournie, des classes personnalisées telles que Decimal2 peuvent être créées pour faciliter les calculs de grands nombres et fournir des fonctionnalités telles que l'arrondi et le calcul de module.

// 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

Cette méthode garantit le calcul et la gestion des grands nombres avec les éléments nécessaires. précision, évitant toute perte potentielle de précision.

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