Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Estou com um problema em tirar a raiz quadrada de um número. Qualquer número colocado para operação sai como resultado 1.
#include <stdio.h>
#include <math.h>
int num,b;
int main () {
scanf("%d",&num);
b = pow(num,(1/2));
printf("%d \n",B);
return 0;
}
Já tentei colocar ao invés de 1/2 , 0.5 mas ocorre um erro que não possibilita uso de variável, apenas número.
Ajudem !
Sempre que uso a funlção SQRT o gcc não reconhece e não compila o programa.
Então tem algo de errado.
Fiz isso daqui:
#include <math.h>
#include <stdio.h>
int main()
{
float num;
scanf("%f",&num);
printf("%f\n",pow(num,(0.5/1)));
return 0;
}Agora o gcc não reconhece...
/tmp/ccIc92FR.o: In function `main':
square.c:(.text+0x35): undefined reference to `pow'
collect2: ld returned 1 exit status
Meu aqui funfa normal... não tem mais algum detalhe que você esqueceu??
Coloquei do mesmo jeito que você citou mas não funcionou. Tentei fazer uma função para calcular a raiz e depois chamei a função e ainda não funcionou. Olha:
#include <math.h>
#include <stdio.h>
float num;
int square(int x){
x = pow(num,(0.5/1));
printf ("%d",x);
return 0;
}
int main(){
int num;
scanf("%d",&num);
square (num);
return 0;
}
Quando modifico a var num por um número que tenha raiz exata na função square funciona sem erro, porém sairá apenas o resultado 3:
int square(int x){
x = pow(9,(0.5/1));
printf ("%d",x);
return 0;
}o erro é por que o gcc não carrega a lib math automaticamente. tente compilar assim:
gcc arquivo.c -lm
o "-lm" carrega a lib math
>
o erro é por que o gcc não carrega a lib math automaticamente. tente compilar assim:
gcc arquivo.c -lm
o "-lm" carrega a lib math
Agora compilou sem erros. Existe mais alguma lib que funcione apenas assim ?
>
Existe mais alguma lib que funcione apenas assim ?
várias: pthread, x11, gtk, qt... mas, para quem está começando, geralmente só usará a libm. Aos poucos você vai descobrindo tudo isso :thumbsup:
Os dois problemas são simples, uma vez descobertas as causas. O primeiro foi resolvido pelo Beraldo.
Seu programa imprime 1 por causa da divisão inteira. Veja o protótipo de pow:
double pow(double x, double y);
O primeiro fato importante é que ela retorna valores de tipo *double*. Você está armazenando o resultado em um objeto de tipo *int*. Isto não é necessariamente um problema, mas pode ser que haja overflow.
Os resultados são todos um porque (1 / 2) é 0, e qualquer número elevado a 0 é um. Se você quiser evitar a divisão inteira, use (1.0 / 2.0):
// compilação: gcc -std=c99 -Wall -Wextra -pedantic -lm a.c -o a
#include <math.h>
#include <stdio.h>
int main(void)
{
printf("\n\t%lf\n", pow(4, 1.0 / 2.0));
}
Boa sorte.Obrigado a todos que ajudaram. Tópico resolvido.
>
Os dois problemas são simples, uma vez descobertas as causas. O primeiro foi resolvido pelo Beraldo.
Seu programa imprime 1 por causa da divisão inteira. Veja o protótipo de pow:
double pow(double x, double y);
O primeiro fato importante é que ela retorna valores de tipo double. Você está armazenando o resultado em um objeto de tipo int. Isto não é necessariamente um problema, mas pode ser que haja overflow.
Os resultados são todos um porque (1 / 2) é 0, e qualquer número elevado a 0 é um. Se você quiser evitar a divisão inteira, use (1.0 / 2.0):
// compilação: gcc -std=c99 -Wall -Wextra -pedantic -lm a.c -o a
#include <math.h>
#include <stdio.h>
int main(void)
{
printf("\n\t%lf\n", pow(4, 1.0 / 2.0));
}Perfeito. O meu sempre deu o resultado 1, depois que coloquei pow(x,1.0/2.0); funcionou perfeitamente.
Bom, não sei se é isso que quer mas pode inverter os números ou usar a função sqrt().