eae pessoal, tudo beleza?
minha dúvida é se existe alguma forma de calcular a raiz quadrada em "C" sem usar a biblioteca "math.h" (sei que é possivel usando essa biblioteca), só usando o "stdio.h", tem jeito?
#include <stdio.h>
main(){
int a, b;
scanf("%d",&a);
b = a ^0.5;
printf("%d\n",b);
return 0;
}
resultado:
$ gcc raiz.c -o raiz
$ ./raiz
raiz.c: In function ?main?:
raiz.c:7: error: invalid operands to binary ^ (have ?int? and ?double?)
- Home
- >
- Fórum
- >
- Profissional
- >
- Programação, Sc...
- >
- calcular raiz quadrada se...
Bom nem sei que linguagem você ta usando.
Mas é claro que desse jeito que você ta fazendo não deve ser possivel ( 0,5 não é um valor aceito: int ou double... ), porém deve existir alguma maneira, já que o Math.h não surge do nada entende... de uma procurada do google..
Boa noite,
Implemente a relação de recorrência obtida usando o método de Newton-Raphson ---> http://en.wikipedia.org/wiki/Newton_method
x_{n+1} = x_{n}/2 + a/2x_{n} com n >= 0
O x_{0} é o valor inicial para a raiz (do número a , positivo), existem alguns detalhes do método que você vai entender lendo o verbete da wikipedia que indiquei acima.
Fique com Deus
PS: sinto muito pela notação, aqui é um fórum de informática, não de ciência, portanto, não dispomos de um interpretador Latex para escrevermos fórmulas adequadamente.
Não há o operador " ^ " na linguagem C padrão, mas para isso há no math.h a função pow()
Uma forma matemática bem popular de se calcular a raiz quadrada é o método da iteração de Newton ( http://pt.wikipedia.org/wiki/Método_de_Newton ), que aproxima a raiz quadrada para um número "suficientemente próximo" à aplicação.
Esse método foi imortalizado no código fonte do Doom 3, creditado a John Carmack mesmo não sendo o primeiro a utilizar desse método e sendo discutível a autoria do código ( http://www.beyond3d.com/content/articles/8/ ). O código aproxima-se mais de um hack, mas o seguinte artigo o explica bem: http://betterexplained.com/articles/understanding-quakes-fast-inverse-square-root/
EDIT: Quis elaborar demais o post e enfim já postaram isso
EDIT2: Puts, há sim o operador " ^ " em C, mas não como operador de potenciação... Valeu pela correção pflynn
RR_Fang disse: Não há o operador " ^ " na linguagem C padrão...
Só um adendo: existe sim o operador representado por ^ na linguagem C: trata-se do operador binário "ou exclusivo" no nível dos bits (bitwise XOR, na notação em inglês).
x_{n+1} = x_{n}/2 + a/2x_{n} com n >= 0
como implementar essa expressão nesse código que postei ?
Na linguagem C não existe potênciação?
f12 disse: como implementar essa expressão nesse código que postei ?
Na linguagem C não existe potênciação?
Existe a funcao pow, tambem da math.h.
Mas porque sem a math.h? Pra que tanto trabalho?
Boa noite,
f12 disse:
como implementar essa expressão nesse código que postei?
O código a seguir não é óptimo (fiz rapidamente), mesmo assim, espero que seja útil:
#include <stdio.h>
float raiz_quadrada(float numero);
int main( int argc, char **argv)
{
float numero;
printf("Entre com um número positivo por favor : "
scanf("%f",&numero);
printf("A raiz quadrada de %.3f é %.5f \n",numero,raiz_quadrada(numero));
return(0);
}
float raiz_quadrada (float numero)
{
int n;
float recorre = numero;
for (n = 0; n < 10; ++n)
recorre = recorre/2 + numero/(2*recorre);
return(recorre);
}
Para compilar
gcc -W -Wall raiz.c -o raiz
Para executar:
./raiz
f12 disse:
Na linguagem C não existe potênciação?
Sim existe, é a função pow da math.h
http://en.wikipedia.org/wiki/Math.h
Fique com Deus
Opa!
Eu tentaria implementar o Método de Newton, acredito que seja a melhor e mais correta forma de se fazer isso!
Um pouquinho de recursão e vc faz isso rapidinho!
Mas porque sem a math.h? Pra que tanto trabalho?
é só para conhecimento mesmo, nada de mais.
#include <stdio.h>
float raiz_quadrada(float numero);
int main( int argc, char **argv)
{
float numero;
printf("Entre com um número positivo por favor : "
scanf("%f",&numero);
printf("A raiz quadrada de %.3f é %.5f \n",numero,raiz_quadrada(numero));
return(0);
}
float raiz_quadrada (float numero)
{
int n;
float recorre = numero;
for (n = 0; n < 10; ++n)
recorre = recorre/2 + numero/(2*recorre);
return(recorre);
}
era exatamente o que eu precisava.
Problema resolvido, agradeço a todos pela atenção.