Ir ao conteúdo
  • Cadastre-se

Problemas com float


gabrielreoli

Posts recomendados

Olá, caros amigos do fórum.

Fiz essa calculadora em C, porém quando escolhi Multiplicação e digitei o seguinte numero: 1995425848 multiplicado por 2, ele trocou o primeiro por este numero 1995425792 e fez a multiplicação.

Testei também com as outras operações e acontece a mesma coisa.

O que pode estar acontecendo de errado?

#include<stdio.h>
#include<stdlib.h>
#include<math.h>

float R, A, B;

int rotadicao(void);
int rotsubtracao(void);
int rotmultiplicacao(void);
int rotdivisao(void);
int rotpotencia(void);
int rotraizquad(void);

int main(void)
{
	char TECLA;
	int OPCAO = 0;
	while (OPCAO != 7)
	{
		system("clear || cls");
		printf("\n - Calculadora - \n\nGabruna Development\n");
		printf("\n\nMenu principal\n");
		printf("--------------------\n\n");
		printf("1 - Adicao\n");
		printf("2 - Subtracao\n");
		printf("3 - Multiplicacao\n");
		printf("4 - Divisao\n");
		printf("5 - Potenciacao\n");
		printf("6 - Raiz Quadrada\n");
		printf("7 - Fim de programa\n\n");
		printf("Escolha uma opcao: "); setbuf(stdin, NULL); scanf("%d", &OPCAO);
		if (OPCAO != 7)
		{
			switch (OPCAO)
			{
                case 1: rotadicao();        break;
                case 2: rotsubtracao();     break;
                case 3: rotmultiplicacao(); break;
                case 4: rotdivisao();       break;
                case 5: rotpotencia();      break;
                case 6: rotraizquad();      break;
                default: printf("\nOpcao invalida! \nTecle <Enter> para acessar o menu: ");
                         getchar() + scanf("Enter");
                         break;
			}
		}
	}
	return 0;
}

int rotadicao(void)
{
	system("clear || cls");
	printf("\n\nRotina de Soma\n");
	printf("-------------------\n\n");
	printf("Entre um valor para A: ");
	setbuf(stdin, NULL); scanf("%f", &A);
	printf("Entre um valor para B: ");
	setbuf(stdin, NULL); scanf("%f", &B);
	R = A + B;
	printf("\nA soma entre %9.2f e %9.2f = %9.2f\n", A, B, R);
	printf("\nTecle <Enter> para acessar o menu: ");
	getchar() + scanf("Enter");
	return 0;
}

int rotsubtracao(void)
{
	system("clear || cls");
	printf("\n\nRotina de Subtracao\n");
	printf("-------------------\n\n");
	printf("Entre um valor para A: ");
	setbuf(stdin, NULL); scanf("%f", &A);
	printf("Entre um valor para B: ");
	setbuf(stdin, NULL); scanf("%f", &B);
	R = A - B;
	printf("\nA subtracao entre %9.2f e %9.2f = %9.2f\n", A, B, R);
	printf("\nTecle <Enter> para acessar o menu: ");
	getchar() + scanf("Enter");
	return 0;
}

int rotmultiplicacao(void)
{
	system("clear || cls");
	printf("\n\nRotina de Multiplicacao\n");
	printf("-------------------\n\n");
	printf("Entre um valor para A: ");
	setbuf(stdin, NULL); scanf("%f", &A);
	printf("Entre um valor para B: ");
	setbuf(stdin, NULL); scanf("%f", &B);
	R = A * B;
	printf("\nA multiplicacao entre %15.2f e %15.2f = %15.2f\n", A, B, R);
	printf("\nTecle <Enter> para acessar o menu: ");
	getchar() + scanf("Enter");
	return 0;
}

int rotdivisao(void)
{
	system("clear || cls");
	printf("\n\nRotina de Divisao\n");
	printf("-------------------\n\n");
	printf("Entre um valor para A: ");
	setbuf(stdin, NULL); scanf("%f", &A);
	printf("Entre um valor para B: ");
	setbuf(stdin, NULL); scanf("%f", &B);
	if (B == 0)
		printf("Erro na divisao\n");
	else
	{
		R = A / B;
		printf("\nA divisao entre %9.2f e %9.2f = %9.2f\n", A, B, R);
	}
	printf("\nTecle <Enter> para acessar o menu: ");
	getchar() + scanf("Enter");
	return 0;
}

int rotpotencia()
{
    system("clear || cls");
    printf("Rotina de Potenciacao\n");
    printf("-------------------\n\n");
    printf("Entre um valor para base: ");
    setbuf(stdin, NULL); scanf("%f", &A);
    printf("Entre um valor para o expoente: ");
    setbuf(stdin, NULL); scanf("%f", &B);
    R = pow(A, B);
    printf("A potenciacao de %9.2f elevado a %9.2f = %9.2f\n", A, B, R);
    printf("\nTecle <Enter> para acessar o menu: ");
	getchar() + scanf("Enter");
	return 0;
}

int rotraizquad()
{
    system("clear || cls");
    printf("Rotina de Raiz Quadrada\n");
    printf("-------------------\n\n");
    printf("Entre um valor: ");
    setbuf(stdin, NULL); scanf("%f", &A);
    R = sqrt(A);
    printf("A raiz quadrada de %9.2f = %9.2f\n", A, R);
    printf("\nTecle <Enter> para acessar o menu: ");
	getchar() + scanf("Enter");
	return 0;
}

 

 

print.PNG

Link para o comentário
Compartilhar em outros sites

12 minutos atrás, CiroboyBR disse:

@gabrielreoli Esse erro é devido ao limite do float, use um double, troque os %f por %lf. Para mais informações veja isso:

https://pt.wikibooks.org/wiki/Programar_em_C/Tipos_de_dados  




 

 http://stackoverflow.com/questions/16029570/what-exactly-does-3-4e-38-7-digits-mean

 

 

Olá @gabrielreoli, acho que o @CiroboyBR ta certo.  O você esta armazenando um número maior que o float permite. Testa ai :

 

 

#include <stdio.h>
#include <float.h> 
#include <math.h>
 
int main(void)
{
    printf("FLT_MAX      = %e\n", FLT_MAX);
}

 

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!