can u answer Y?

shanku_4ch's Avatar, Join Date: Jan 2007
Light Poster
Quote:
#include<stdio.h>
#include<conio.h>
void main()
{
float a=0.7;
if(a<0.7)
printf(" C ");
else
printf("c++");
getch();
}
this program gives output as :
C
why?
--------------------------------------------------------------

i browsed and found a answer saying
(c<0.7) 0.7 is double by default & variable c is float so the condition turns true
then it must be true for all values but if i use

c=0.8/*or 0.007 or 0.223*/
if(c<0.8/*0.007 or 0.223*/)

it prints C++


i want answer for this!!!!
shabbir's Avatar, Join Date: Jul 2004
Go4Expert Founder
Check to see if the value of a is 0.6999999999999
simcopter's Avatar, Join Date: Jul 2008
Newbie Member
you are running into a precision issue between floats and doubles. The easiest way to fix it is to add a 'f' to the literal telling the compiler to store it as a float. the code should work then.

Code:
#include<stdio.h>
#include<conio.h>
void main()
{
float a=0.7f;
if(a<0.7f)
printf(" C ");
else
printf("c++");
getch();
}
this should work as you would expect.

The import take away is that when comparing floats and doubles it gets muddy if the numbers are really close together because of the different number of significant bits for each type.
shanku_4ch's Avatar, Join Date: Jan 2007
Light Poster
but the same program gives other output if i use other values other then 0.7