Je crée un simple programme PHP qui effectue une action si (et seulement si) trois nombres aléatoires sont calculés en nombre entier. Les nombres aléatoires sont tous des entiers, créés avec la fonction rand(). Sans entrer dans les détails spécifiques du calcul, l'important (en termes de mon problème) est qu'il inclut la prise d'une racine carrée. N'étant pas un codeur PHP très expérimenté, la seule fonction racine carrée que je connaisse est sqrt(). Le problème est que sqrt() renvoie un float, même si l'entrée est un entier et que la sortie est exacte. J'ai brièvement pensé à convertir la sortie en nombre entier (en utilisant quelque chose comme intval(), mais cela ne fonctionnera pas car cela convertira toutes les sorties en entiers, ce qui rend le test inutile! Des idées sur la façon de faire cela? Merci .,php sqrt fonction qui renvoie un nombre entier?
Répondre
Si vous voulez juste pour déterminer si elle est un carré parfait, déterminer exactement si le
intval(result) * intval(result) == originalValue
Je ne sais pas la version php de ces fonctions, mais peut-être que vous faites? :)
+1 Bonne idée. Notez que cela échouera probablement si 'value 'est un float (pas clair dans la question), car vous ne pouvez pas comparer les floats avec' == '(dans n'importe quelle langue). – sleske
Oui, j'aime celui-ci. Cela fonctionnera car la valeur d'origine est un nombre entier. Merci! – Bill
C'est un problème commun lorsque vous travaillez avec virgule flottante Il suffit de vérifier que le flotteur vous obtenez est très proche d'un entier, cela se fait en vérifiant que la partie décimale est très faible:
if (abs(round(f)-f))<delta)
# do stuff
delta
delta
Ici, delta
est une petite constante, telle que 0,0001, dont la valeur dépend de la proximité de votre résultat avec un nombre entier. Cela dépendra de vos calculs.
C'est aussi une bonne idée (très "Calculusesque"!). Un bon truc à savoir. Je dois penser à quelle précision serait nécessaire ... – Bill
@Bill: Merci. En fait, c'est plus l'analyse numérique que le calcul. Et oui, déterminer la précision est la partie difficile ... c'est ce que les gens qui font de l'analyse numérique passent parfois des années à déterminer ... – sleske
Quelque chose dans le sens de if($result % 1.0 == 0)
pourrait fonctionner, mais je n'ai pas la capacité de le tester maintenant.
Cela semble fonctionner, même si je ne suis pas sûr des problèmes à virgule flottante signalés par Sleske. – Bill
-1 Cela ne fonctionne pas. L'opérateur '%' de PHP ne fonctionne qu'avec des entiers. Ainsi '$ resultat% 1.0' retournera 0 pour n'importe quelle entrée. Vous voulez la fonction 'fmod' (module point flottant).Mais même alors, vous ne devriez pas comparer le résultat en utilisant '==', car cela n'est presque jamais sûr pour les nombres fp. Voir par exemple http://stackoverflow.com/questions/4682889/is-floating-point-ever-ok – sleske
$result % 1e9
retournera une partie entière de $ result (pour les négatifs il trouvera le plafond du résultat). Mais c'est un hack, donc vous pourriez l'utiliser seulement pour le plaisir.
Cette connaissance est de la programmation dans une autre langue, mais avez-vous essayé de multiplier l'expression par 1. par exemple si vous avez besoin pour obtenir l'entier de quelque chose comme a = 3,45 * 8;
faites ceci a = 3,45 * 8 * 1;
- 1. Ruby - Sqrt sur un très grand nombre entier Problèmes d'arrondi
- 2. Fonction qui retourne un nombre entier avec une distribution spécifique
- 3. Fonction python qui renvoie un nombre variable de sorties
- 4. SQL Fonction sqrt
- 5. Problème avec une fonction récursive pour trouver sqrt d'un nombre
- 6. sqrt (1.0 - pow (1.0.2)) renvoie -nan
- 7. C++ fonction Sqrt
- 8. fonction php qui renvoie une requête MySQL
- 9. Php 64bit nombre entier hash
- 10. Fonction type() avec un entier?
- 11. SQLAlchemy renvoie un entier
- 12. La procédure oracle renvoie un entier
- 13. Fonction de programmation sqrt C
- 14. Méthode qui renvoie soit un entier, soit une chaîne
- 15. Imprimer un nombre entier comme nombre décimal
- 16. Fonction récursive qui renvoie un bool?
- 17. Fonction pour vérifier si un entier est valide dans PHP
- 18. Convertir exponentielle à un nombre entier en PHP
- 19. renvoie un entier de PHP et mySQL à Android
- 20. est-ce un bogue dans la fonction sqrt
- 21. Comment obtenir les octets qui composent un nombre entier?
- 22. Convertir un nombre entier en fonction de tableau char
- 23. Pourquoi Application.get_Caller (Type.Missing) renvoie un entier négatif?
- 24. Étant donné un nombre décimal, recherchez le plus petit multiplicateur entier qui donne un résultat entier
- 25. paramètre entier fonction php problème
- 26. fonction qui renvoie une chaîne
- 27. php, convertir en nombre entier hexadécimal
- 28. Insérer un nombre entier, mysql
- 29. mysqli_field_type renvoie un nombre
- 30. Comment déclarer une fonction qui renvoie un pointeur de fonction?
Vérifiez simplement si 'floor ($ num) == $ num'? Ou suis-je manquer quelque chose ... –
Votre problème est un peu confus. –
@Brad: Bonne réflexion en principe, mais '==' pour les flotteurs est presque toujours (lire: toujours) une mauvaise idée. Comparez en utilisant un delta. Voir par exemple http://stackoverflow.com/questions/4682889/is-floating-point-ever-ok – sleske