Détermination de l'intégrité des valeurs flottantes
Dans cet extrait de code, vous recherchez la plus grande racine cubique qui est un nombre entier, inférieur à 12 000 :
processing = True n = 12000 while processing: n -= 1 if n ** (1/3) == #checks to see if this has decimals or not
Pour vérifier si une valeur flottante est un entier, vous pouvez utiliser la méthode float.is_integer() :
>>> (1.0).is_integer() True >>> (1.555).is_integer() False
Notez que dans Python 2, 1/3 donne 0 en raison de la division au sol pour les opérandes entiers, et l'arithmétique à virgule flottante peut être inexacte. Ajuster la boucle dans cette optique :
for n in range(12000, -1, -1): if (n ** (1.0/3)).is_integer(): print n
On obtient les résultats attendus :
27 8 1 0
Cependant, en raison de l'imprécision de l'arithmétique à virgule flottante, les nombres supérieurs à 3 au cube ( dont 10648) sont omis. Pour résoudre ce problème, vous pouvez plutôt rechercher des nombres proches du nombre entier :
import math for n in range(12000, -1, -1): if math.isclose((n ** (1.0/3)), round(n ** (1.0/3))): print n
Cette variante génère :
10648 27 8 1 0
Pour Python 3.5 et versions ultérieures, vous pouvez utiliser les mathématiques. Fonction isclose() pour vérifier si une valeur à virgule flottante se trouve dans une marge personnalisable.
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!