Eu fiz um programa que no meio dele deve calcular LN(preco1/preco2).
e minha saida para isso foi essa:
fprintf(saida1,"%lf ", log(preco1/preco2) );
porém, caso eu mude o "%lf" por %f, o resultado fica exatamente igual, e, na minha opinião, com uma precisão muito baixa! somente 5 casas decimais (a 6a é aproximada), e nesse meu caso, que eu calculo um ln, é muito importante uma precisão de algo em torno de 8 ou 9 casas decimais (até por que, esse valor retornado vai ser uma porcentagem, então só nessa "operação" de usar como porcentagem, eu já perco mais duas casas decimais, e acabo tendo uma precisão horrível de apenas 3 casas decimais...!!
(obs: tanto preco1 quanto preco2 estão declarados como double)
achei estranho, e resolvi criar um programa que compare float e double, e daí que vi que a coisa ficou ruim!
e as saidas me retornaram valores EXATAMENTE identicos! com 5 casas decimais, e a 6a casa aproximada!
Portanto, pra que serve o Double, sendo que ele ocupa o dobro de bits do float e, em teoria, ele não me fornece mais casas decimais??
Outra coisa, muda algo usar, em qualquer ponto do codigo, seja em scanf ou printf, %lf ou invés de %f?
E, por fim, e o mais importante a titulo de resolver o meu problema de verdade, e não só as minhas duvidas e curiosidades:
Alguém tem ideia de como eu fazer o meu LOG(preco1/preco2) aparecer com mais casas decimais...??
(tentei um migue, fazer log(pow(preco1,100)/pow(preco2,100)), o que já me daria o valor em porcentagem, mas não deu certo, a precisao ficou igual a se eu fizesse 100*log(preco1/preco2) - numericamente eu sei que é igual, mas achei que poderia enganar o pc fazendo ele me dar mais precisão, mas não funcionou...
Pergunta
Felipe Amadio
Pra começar, eu trabalho em C (não C++)
Eu fiz um programa que no meio dele deve calcular LN(preco1/preco2).
e minha saida para isso foi essa:
fprintf(saida1,"%lf ", log(preco1/preco2) );
porém, caso eu mude o "%lf" por %f, o resultado fica exatamente igual, e, na minha opinião, com uma precisão muito baixa! somente 5 casas decimais (a 6a é aproximada), e nesse meu caso, que eu calculo um ln, é muito importante uma precisão de algo em torno de 8 ou 9 casas decimais (até por que, esse valor retornado vai ser uma porcentagem, então só nessa "operação" de usar como porcentagem, eu já perco mais duas casas decimais, e acabo tendo uma precisão horrível de apenas 3 casas decimais...!!
(obs: tanto preco1 quanto preco2 estão declarados como double)
achei estranho, e resolvi criar um programa que compare float e double, e daí que vi que a coisa ficou ruim!
ai vai o programa que eu fiz:
e as saidas me retornaram valores EXATAMENTE identicos! com 5 casas decimais, e a 6a casa aproximada!
Portanto, pra que serve o Double, sendo que ele ocupa o dobro de bits do float e, em teoria, ele não me fornece mais casas decimais??
Outra coisa, muda algo usar, em qualquer ponto do codigo, seja em scanf ou printf, %lf ou invés de %f?
E, por fim, e o mais importante a titulo de resolver o meu problema de verdade, e não só as minhas duvidas e curiosidades:
Alguém tem ideia de como eu fazer o meu LOG(preco1/preco2) aparecer com mais casas decimais...??
(tentei um migue, fazer log(pow(preco1,100)/pow(preco2,100)), o que já me daria o valor em porcentagem, mas não deu certo, a precisao ficou igual a se eu fizesse 100*log(preco1/preco2) - numericamente eu sei que é igual, mas achei que poderia enganar o pc fazendo ele me dar mais precisão, mas não funcionou...
Link para o comentário
Compartilhar em outros sites
2 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.