pedroluzio Posted November 29, 2013 at 07:22 PM Report #535669 Posted November 29, 2013 at 07:22 PM Boas, estou a desenvolver um programa que conte o numero de casas decimanis de um numero, não quero a resposta, quero apenas que me expliquem pk é que a float mostra numero sei lá de onde: #include <stdio.h> #include <math.h> main() { float n, n1, n2; int i=0; printf("Digite um numero: "); scanf("%f",&n); do { n1=n; printf("%.5f\n",n1); n1 = trunc(n1); n2 = n - n1; printf("%.5f\n",n2); n= n2 * 10; i++; printf("%.5f\n",n); printf("\n%d\n",i); }while(n>0); getch(); }
HappyHippyHippo Posted November 29, 2013 at 07:29 PM Report #535671 Posted November 29, 2013 at 07:29 PM primeiro, float é algo que não se usa ... não faz sentido usar ... hoje em dia, o uso de doubles chega a ser mais rápido que floats porque a ALU funcinoa sempre com doubles segundo: do { // ... n= n2 * 10; // ... }while(n>0); quando é que o n toma valores negativos = nunca terceiro, isso não se faz com floats ou doubles IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
pedroluzio Posted November 29, 2013 at 07:39 PM Author Report #535673 Posted November 29, 2013 at 07:39 PM Nunca torna, mas chega a um ponto que torna o valor o valor de 0
thoga31 Posted November 29, 2013 at 09:24 PM Report #535685 Posted November 29, 2013 at 09:24 PM Não gosto nada da tentativa de resolução que estás a fazer. Tanta variável, tanta conta... um ciclo com duas linhas, incluindo o próprio while, faz o truque. Imagina o seguinte número: 12.3456. Como contas as 4 casas decimais? Sem qualquer trunc. Vais multiplicando por 10 até chegares a 123456, e aqui páras. Mas como sabes se hás-de parar aqui? Porque 1234560 % 10 == 0. Há várias formas de resolver o problema, mas essa é muito exotérica 😄 Knowledge is free!
Rui Carlos Posted November 29, 2013 at 10:08 PM Report #535689 Posted November 29, 2013 at 10:08 PM A determinado ponto vais ter 0, mas ao usares valores numéricos, há uma forte probabilidade de teres erros de arredondamento, visto que o computador trabalha em base 2, e tu estás a fazer operações em base 10. E isto faz com que não obtenhas 0 tão rapidamente como devias. (Aliás, com os prints que tens no código, deves ter reparado que as operações nem sempre dão exactamente o resultado que esperas.) Por isso, seria melhor usares strings para contar as casas decimais (que penso ser também o que o HappyHippyHippo estava a sugerir). (HappyHippyHippo, na maior parte dos casos os doubles são melhores, mas também há alguns casos em que há vantagens em usar floats.) EDIT: @thoga31, a tua solução também poderá ter problemas com os arredondamentos. Rui Carlos Gonçalves
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now