Desafio
Parece que, embora tenhamos muitos desafios que trabalham com números quadrados ou de outras formas, não temos um que simplesmente pergunte:
Dado um número inteiro n(onde n>=0) como entrada, retorne um valor verdadeiro se nfor um quadrado perfeito ou um valor falsey se não.
Regras
- Você pode receber informações por qualquer meio razoável e conveniente, desde que seja permitido pelas regras de E / S padrão .
- Você não precisa manipular entradas maiores do que o idioma escolhido pode manipular nativamente nem o que levaria a imprecisões de ponto flutuante.
- A saída deve ser um dos dois valores consistentes de verdade / falsey (por exemplo,
trueoufalse,1ou0) - verdade se a entrada for um quadrado perfeito, falsey se não for. - Isso é código-golfe, e a menor contagem de bytes ganha.
Casos de teste
Input: 0
Output: true
Input: 1
Output: true
Input: 64
Output: true
Input: 88
Output: false
Input: 2147483647
Output: false
2**54-2é ainda maior do que a dupla pode lidar com segurança, pelo menos em JavaScript18014398509481982 > 9007199254740991
2**54-2em um console JS e compare o que você obtém 18014398509481982(o valor exato). JS gera o valor exato, portanto 2**54-2é representável com um duplo. Se isso ainda não o convencer, pegue os dados binários 0100001101001111111111111111111111111111111111111111111111111111, interprete-os como um flutuador de precisão dupla IEEE-754 e veja qual valor você obtém.
18014398509481982(2**54-2), que é representável com um duplo, e causa respostas que costumamsqrtfalhar.