Possible en double:
Fastest way to determine if an integer's square root is an integerQu'est-ce qu'un bon algorithme pour déterminer si une entrée est un carré parfait?
Qu'est-ce qu'un moyen de voir si un nombre est un perfect square?
bool IsPerfectSquare(long input)
{
// TODO
}
J'utilise C# mais c'est la langue agnostique. Bonus points pour la clarté et la simplicité (ceci n'est pas destiné à être le code-golf).
Edit: cela a beaucoup plus complexe que prévu! Il s'avère que les problèmes de double précision se manifestent de deux manières. Premièrement, Math.Sqrt prend un double qui ne peut pas tenir longtemps (merci Jon). Deuxièmement, la précision d'un double va perdre de petites valeurs (.000 ... 00001) lorsque vous avez un énorme carré presque parfait. par exemple, ma mise en œuvre a échoué à ce test pour Math.Pow (10,18) +1 (la mienne a déclaré true).
Vous pouvez également google pour la méthode 'lsqrt' utilisée pour la racine carrée entière. – leppie
Michael, Bill le Lézard a fait un bon point que c'est juste une question similaire, pas le doublon exact. Je ne pense pas que la question doive être close. Outre le problème du carré parfait est beaucoup plus complexe en termes pratiques que cela puisse paraître et les réponses ici apportent une grande contribution. –
Pour la solution que vous choisissez, n'oubliez pas d'effectuer un contrôle rapide de négativité. – angus