felippesena
(usa Fedora)
Enviado em 25/04/2012 - 11:16h
hcabzlus escreveu:
São questões de arredondamento. O valor que você espera que seja 0 na verdade é 1.55431e-15. Como você está formatando a saída para um float, a formatação simplesmente desconsidera os valores menos significativos e mostra ele sendo como 0.
Entre com numero de vezer o que sera incrementado = 15
Valor de inic: -8.1 MENOR que zero - valor = -8.100000
Valor de inic: -7.2 MENOR que zero - valor = -7.200000
Valor de inic: -6.3 MENOR que zero - valor = -6.300000
Valor de inic: -5.4 MENOR que zero - valor = -5.400000
Valor de inic: -4.5 MENOR que zero - valor = -4.500000
Valor de inic: -3.6 MENOR que zero - valor = -3.600000
Valor de inic: -2.7 MENOR que zero - valor = -2.700000
Valor de inic: -1.8 MENOR que zero - valor = -1.800000
Valor de inic: -0.9 MENOR que zero - valor = -0.900000
Valor de inic: 1.55431e-15 MAIOR que Zero - valor = 0.000000
Valor de inic: 0.9 MAIOR que Zero - valor = 0.900000
Valor de inic: 1.8 MAIOR que Zero - valor = 1.800000
Valor de inic: 2.7 MAIOR que Zero - valor = 2.700000
Valor de inic: 3.6 MAIOR que Zero - valor = 3.600000
Valor de inic: 4.5 MAIOR que Zero - valor = 4.500000
Valor de inic: 5.4 MAIOR que Zero - valor = 5.400000
felippesena escreveu:
Bom dia hcabzlus, então montei o código abaixo.
#include<stdio.h>
void main(){
float inic =-9.00;
int i;
printf(" Valor Inicia = -9.00 - ");
printf(" Incremento de + 0.90\n");
printf("Entre com numero de vezer o que sera incrementado = 15 \n");
for(i = 15; i>= 0; i--){
inic = inic + 0.90;
if(inic < 0.0){
printf("MENOR que zero - valor = %f\n", inic);
}
else if (inic == 1.55431e-15){
printf("IGUAL a zero - valor = %f\n", inic);
}
else if ( inic > 0.0){
printf("MAIOR que Zero - valor = %f\n", inic);
}
}
}
e o resultado ficou igual.
Valor Inicia = -9.00 - Incremento de + 0.90
Entre com numero de vezer o que sera incrementado = 15
MENOR que zero - valor = -8.100000
MENOR que zero - valor = -7.200000
MENOR que zero - valor = -6.300000
MENOR que zero - valor = -5.400000
MENOR que zero - valor = -4.500000
MENOR que zero - valor = -3.600000
MENOR que zero - valor = -2.700000
MENOR que zero - valor = -1.800000
MENOR que zero - valor = -0.900000
MAIOR que Zero - valor = 0.000000
MAIOR que Zero - valor = 0.900000
MAIOR que Zero - valor = 1.800000
MAIOR que Zero - valor = 2.700000
MAIOR que Zero - valor = 3.600000
MAIOR que Zero - valor = 4.500000
MAIOR que Zero - valor = 5.400001
o que estou fazendo errado? obs.. estou usando Microsolt Visual C++