Oi pessoal, para a minha turma eu preciso fazer uma raiz quadrada numérica, mas ela não funciona !! HELLPP!
O desafio:
Write a function or program that will "make a number square root".
Nota: Isso é trolling de código. Dê uma resposta "útil" para orientar este novo programador em seu caminho para o sucesso da programação! Seja criativo!
Respostas:
Java
Uau, este é um problema complicado. Eu nunca fiz uma raiz quadrada antes. Eu tenho raízes quadradas, mas não fiz uma. Não se esqueça de deixar seu código bonito para obter crédito extra em suas aulas. Aqui está o código que forma uma raiz quadrada de um número inserido:
Trolls:
System.out.print
s não imprimem parajava.lang.System.out.print
. Eles imprimem para uma classe interna. Os dois primeiros (que deveriam imprimir seqüências de caracteres) não fazem nada; o segundo:100
) ?:0
. Falha no loop infinito quando a entrada é negativa pela mesma razão que falha no loop infinito quando a entrada é0
.fonte
JFrame.DO_NOTHING_ON_CLOSE
na lista de trolls ...setAlwaysOnTop(true)
também.C ++
Bem, se você não tem um caminho melhor, há sempre a solução de força bruta:
Isso itera através de todos os valores possíveis de a
double
(adicionando umunion
comlong long
o mesmo tamanho de bit, já que não há uma boa maneira de iterá-los usando dobras como dobras reais) até encontrar um cujo quadrado sejan
.fonte
double
e umlong long
é a coisa mais aterrorizante que eu já vi.union
é um comportamento indefinido e iteração através de duplas é possível com a funçãostd::nextafter
std::nextafter
existia antes de você me mencionar, então sim, era procurado.double
valores não podem ser produzidos a partir da multiplicaçãox*x
ondex
édouble
, também. Portanto, a pesquisa não será bem-sucedida às vezes (na maioria das vezes?), Fornecendo NaN em vez de resultado mais correto.Python 3
Este código simples dará uma resposta exata :
fonte
No Python 3, você pode fazer o seguinte:
fonte
Corrigindo esta resposta ,
Isso é completamente errado. Todo mundo sabe que o mais rápido é o ASM.
X86_64 ASM puro!
Ao contrário de outras respostas retardadas, esta possui uma complexidade de O (1)!
E também, ao contrário de outras respostas, isso é 101% preciso,
sqrt(0.5)
pois dá0.70710678118655
!fonte
PCMPEQQ
não aparece mais a você como "lixo ilegível magia produzida por um compilador"Python
Se for permitido em sua classe, você pode usar uma biblioteca matemática complexa como auxiliar aqui, instale-a executando o comando:
Então você executaria algo como este script python:
(Certifique-se de executar isso com privilégios de administrador)
fonte
root
no Unixland).C
Obviamente, este é o melhor caminho. É o mais rápido que você pode imaginar, olhando para o código. Usando C, porque C é mais rápido e esse problema requer uma solução rápida. Eu testei isso para os meus números favoritos, como 7, 13 e 42, e parece funcionar.
fonte
results[number];
?C
Truques e mágicas farão funcionar.
fonte
Python 3
Vocês estão fazendo tudo errado. Qualquer um pode ver que a raiz quadrada de 20 não é 4.47213595499958 ou mesmo √20. Essa solução move a difícil tarefa de calcular a raiz quadrada para o módulo destinado a essa finalidade.
Um desses módulos é o sympy, que fornece matemática de raízes quadradas. Ao contrário de outras soluções aqui, ele realmente faz tudo corretamente. Ele até assume que o sqrt (-1) é I - nenhuma das soluções aqui pode resolver isso.
E aqui está o código modular, que é a aparência de bons programas. As funções devem ser tão pequenas quanto possível, se não forem, significa que você escreve programas terríveis. Além disso, os programas devem ter muitos comentários.
E aqui está um exemplo desse programa funcionando.
fonte
print_format_prompt_with_thing_to_specify_get_default_prompt_format_to_getattr_get_sys_name_from_get_stdout_name_and_print_square_root_of_read_from_stdin_and_print_get_string_from_get_newline_to_getattr_get_sys_name_from_get_stdout_name
.Javascript
Infelizmente, o JavaScript não suporta o símbolo de raiz quadrada para nomes de funções. Em vez disso, podemos usar outro caractere do alfabeto Unicode para representar uma função de raiz quadrada.
Neste exemplo eu vou usar
ᕂ
.Depois de termos um símbolo válido, podemos usar o objeto Math para gerar uma função de raiz quadrada.
É simples! :)
fonte
Julia
Obviamente, a melhor maneira de fazer isso é usar a raiz quadrada da Taylor Series:
Na verdade, isso gera valores muito precisos:
Mas é claro que é uma aproximação (e também uma série convergente) é inútil para valores não próximos de 1:
fonte
a^2
(n vezes) e multiplicar pora
(n vezes) a resposta (sqrt(x)~a^n*sqroot(x/a^2n)
) x-> 0 (se a> 0) não for 1 (dando grandes erros). Além disso, se x / a ^ 2n ~ 1 os númerosa!=x
en
mudará para um arbitráriox
para obter a condição desejada (tornando irritante e demorado encontrá-los).Látex
A solução para isso é bastante difícil e muito complexa, então tome seu café. O problema é que, dependendo do tipo de número que você deseja, o quadrado do código muda significativamente. Eu vou te mostrar o problema. Digamos que esse
9
é o seu número. Então o código ficaria assim:Agora, digamos que esse
1234321
é o seu número, veja o código:Por último, mas não menos importante, digamos que seu número seja
0
.Uma boa maneira de resolver isso é escrever um programa em
Ook!
orPiet
, que deseja seu número e gera o resultadoLaTeX-sqrt-code
para ele. Aqui está um exemplo muito simplesOok!
, pois ele é capaz de ler apenas um byte e não verifica se esse byte é um número legal ou não, mas acho que você chegará ao ponto.Mesmo para
Piet
:Essa seria a maneira mais eficiente. Eu também sugeriria o uso
Piet
, pois é sempre que uma bela obra de arte, para que as coisas não fiquem entediantes rapidamente.fonte
Haskell
Parei de confiar nos computadores quando soube pela primeira vez sobre erros de ponto flutuante. Sério, se o Google não pode controlá-los , quem pode?
Portanto, nossa melhor aposta é encontrar uma solução envolvendo apenas números inteiros. Felizmente isso é fácil, pois podemos apenas verificar todos os números, porque todo intervalo [1..n] contém apenas uma quantidade finita deles, não como os reais porcaria de aleph-1. Aqui está uma implementação de exemplo no Haskell:
Funciona como um encanto, confira:
A precisão deve ser suficiente para a maioria das aplicações.
fonte
double
s e o DDG esteja usandotriple
s.Java
A maneira mais precisa de fazer isso é iterar. Primeiro, faça um loop por
integer
s até ultrapassar o alvo e depois mude paradouble
s. Este método tem a vantagem de ser exato , ao contrário de outros métodos de "estimativa" que você pode ver. Você sacrifica um pouco de velocidade, mas para a maioria dos aplicativos, é exatamente isso que você precisa.Você pode modificar esta resposta dependendo da precisão que precisa ser, mas isso deve funcionar no mínimo até o bilionésimo:
fonte
0.000000001
é que ele é propenso a erros de arredondamento. Eu criei uma solução mais precisa em C ++.Math.nextUp(root)
vez de+0.000000001
? Isso levaria muito mais tempo ... e é garantido que terá sucesso.Double
e fiquei surpreso quando não consegui encontrá-lo. Não pensou em procurarMath
, mas isso funciona muito bem. Ainda não tive "falha" em nada.Javascript
Essas constantes mágicas podem ser usadas para calcular a raiz quadrada de um número usando o alfabeto:
Testes:
Isso parece funcionar muito bem. Gostaria de saber se existe uma maneira mais curta?
fonte
Javascript
Problema muito difícil!
Não existe uma função interna para isso no JavaScript ...
Parece um trabalho para o solucionador de Newton-Raphson.
Agora você pode usar
Math.sqrt
fonte
JavaScript / ActionScript
Não há como calcular diretamente uma raiz quadrada no ActionScript ou JavaScript; no entanto, existe uma solução alternativa. Você pode obter a raiz quadrada de um número aumentando-o para o
1/2
poder.É assim que ficaria no JavaScript e no ActionScript 2:
E embora a função funcione tão bem no ActionScript 3, eu recomendaria o uso de variáveis digitadas e retornaria valores para maior clareza e confiabilidade:
O troll:
fonte
1/2 == 0
.Python 2.7
Explicação
Citação
Wikipedia - Raiz quadrada
Em matemática, a raiz quadrada de um número a é um número y tal que y 2 = a
Em outras palavras, todo número é uma raiz quadrada de outro número.
Nota
Esta pergunta para mim é semelhante a um quebra-cabeça conhecido Como diminuir a linha sem esfregar ou cortá-la
fonte
PHP (e outros):
Como a questão que foi descrita, a questão não significava que realmente precisamos calculá-la, eis a minha solução:
Ele fornece uma maneira de calcular com precisão a raiz quadrada em vários idiomas.
A lista de idiomas pode ser expandida.
O valor pode ser enviado por POST, GET, um cookie ou até mesmo ser salvo na sessão.
Se você fornecer apenas o número, ele ficará confuso e fornecerá o resultado calculado, válido para (quase) TODAS as linguagens de todos os tempos!
fonte
C
Isso é melhor do que todas as outras 27 respostas, porque todas são imprecisas. É isso mesmo, eles só dão uma resposta quando deve haver 2. Este nem tenta responder se estiver errado, apenas desiste e se fecha.
Controle de código:
for
abuso de loop#define
use paraaumentar alegibilidade diminuída√1024
retorna3√1024 = ∓32
, o que é totalmente errado)fonte
#define the number
... legais! Gostei do seu raciocínio sobre a condição de mostrar a mensagem de uso, em particular.C ++
com base em http://en.wikipedia.org/wiki/Fast_inverse_square_root e na resposta de @ snack.
Exceto em vez de tentar encontrar x ^ (- 0,5) em x ^ (0,5), modifiquei o algoritmo para fazê-lo diretamente.
ALGORITMO
Converta um número de ponto flutuante (nesse caso, um duplo) em um número inteiro (nesse caso, por muito tempo).
Os primeiros bits do número do ponto flutuante são o expoente: ou seja, o número é armazenado como 2 ^ AAA * 1.BBBBBBB. O mesmo acontece com a mudança de direitos e esse expoente é dividido pela metade.
Na raiz quadrada inversa original , esse número foi subtraído de uma constante para fornecer o recíproco. Eu apenas adiciono à constante, porque quero a raiz quadrada diretamente. O valor da constante é escolhido para dar uma resposta que é a melhor aproximação ao valor desejado.
Lance o número de volta ao ponto flutuante.
Opcionalmente, uma ou duas iterações do método de Newton podem ser usadas para melhorar o resultado, mas eu não me incomodei, porque queria ver o quão perto eu poderia ficar.
As constantes usadas parecem muito misteriosas, mas além dos primeiros dígitos, os valores não são críticos. Eu encontrei a constante por tentativa e erro. Parei assim que obtive um valor que às vezes subestimava e às vezes superestimava.
Resultados
A conversão é necessária apenas porque C não permitirá que você faça operações de deslocamento de bits em um flutuador; portanto, as únicas operações reais são o deslocamento de bits e a adição. Não usei uma única iteração do método de Newton para melhorar o resultado, portanto a precisão é notável. O professor do OP ficará impressionado com a rapidez do método, que (francamente) é preciso o suficiente para muitos propósitos!
fonte
10
* 1.000
, sqrt (4) = 2 ^01
* 1.000
= 2, sqrt (2) = 2 ^00
* 1.100
= 1,5. Portanto, o1
bit retirado do expoente fornece uma mantissa de 1,5, que não está muito longe do valor real do sqrt (2), que é cerca de 1,4. Mas não tenha ideia de como ele fornece respostas com precisão superior a 3%.E
Nota: isso funciona apenas no meu computador, pois o hardware subjacente não armazena números no binário, mas na base e, de modo que o que aparece como
10
representa e,100
representa e e , e assim por diante. Dessa maneira, o que você pode chamar em uma máquina binária de deslocamento de bit para a esquerda executa x => e x , e o que você pode chamar em desvio de bit em uma máquina binária para a esquerda executa x => ln x. Claramente, é difícil representar seus números subjacentes neste meio de Internet muito limitado e centrado em binário, mas eu faço o meu melhor.A sintaxe de E é notavelmente semelhante à do C / C ++, portanto deve ser fácil para a maioria das pessoas entender.
fonte
n >> 1
não é o mesmo quelog(n)
.JavaScript / HTML / CSS
Pensei em usar jQuery e ids para trollar um pouco mais, mas prefiro vanilla js.
O resultado não é perfeitamente preciso, mas funciona!
fonte
GeoGebra
Leia o valor da sua resposta no eixo de coordenadas.
Experimente online aqui (requer Java) ou desfrute de algumas capturas de tela abaixo:
fonte
100% pura festança (baseado em número inteiro)
Com apresentação ascii-art:
Esse quadrado raiz perfeito deve ser originado no bash usando o
source
comandoAntigo (esta versão pode ser simplesmente colada em qualquer terminal do console)
Funcionará como:
Atenção: A raiz é quadrada !!
fonte
Java
Obrigado, ao ggmx's pelo código na geração de n dígitos do pi em java .
Não estava com vontade de implementar informações. Para testar a alteração do código
sqrtThis
eexpectedPercision
.Aqui está como o código funciona. Primeiramente, obter a raiz do sqrt para o número inteiro é trivial, então eu não queria implementar isso e, em vez disso, usei javas construídas no sqrt fcn. O restante do código é 100% legítimo.
A ideia básica,
Como pi é um número decimal longo e sem repetição, infinito, todas as sequências numéricas devem ocorrer dentro dele(leia a edição). Portanto, sua resposta está dentro de pi !! Como tal, podemos apenas aplicar uma pesquisa regex em pi, procurando sua resposta. Se não conseguirmos encontrar uma boa resposta, apenas dobraremos o tamanho do pi em que estamos pesquisando!É realmente fácil, na verdade, pode-se dizer que é tão fácil quanto pi :)
Não foi provado que o Edit Pi contém todas as seqüências de números finitos dentro dele. O fato de pi ser infinito e não repetitivo não é prova suficiente para declarações como comprovadas pela Exelian. No entanto, muitos matemáticos acreditam que pi contém todas as seqüências de números finitos.
fonte
JQuery
este é o mais preciso (bônus: também funciona para letras!)
Aqui está um violino
fonte
document.write
o suficiente.C ++
Eventualmente, você obterá uma raiz quadrada.
Corrigi o código para refletir melhor a pergunta. Obrigado por suas sugestões ... o código é atualizado.
fonte
x+=1e-16
?DBL_EPSILON
,.Python
Esta solução:
Spoiler:
Código:
fonte
C ++
Sua pergunta não é compilada porque você coloca um! no fim. C ++ não gosta!
Aqui a pergunta correta para o compilador:
Ah .. e o arquivo make.
e 26317.def. Isso já deve estar presente no seu compilador
Sim, alguém pode usar -E para gerar a resposta correta de pré-processo, mas se você souber -E, também saberá esquadrinhar. : P Aqui alguns dos pré-processados. Solução mínima muito ruim, sem verificação vinculada, sem aviso prévio. Até que o trigrafo seja pré-processado.
fonte