IRIX 3.2 C compiler bug
    Conrad Huang 
    conrad at cgl.ucsf.edu
       
    Tue Feb  6 05:40:44 AEST 1990
    
    
  
>>On a 4D/240S running 3.2:
>>	% cat t.c
>>	main()
>>	{
>>		double a,b,c;
>>
>>		b = 1.0;
>>		c = 2.0;
>>		a = b==c;
>>		printf("a=%f\n",a);
>>	}
>>	% cc t.c
>>	% ./a.out
>>	a=2147469288.000000
>Just what did you expect this to return?  Unless I am mistaken, ANSI C 
>still doesn't any distinction about what number is returned, only that 
>it is NOT zero, which is certainly the case for your code here.  It is probably
>also true that comparison of floating point numbers is an inherently dicey
>proposition.  
Say what!?  In K&R, Appendix A, page 189, Section 7.6,
	"The operators < (less than), > (greater than), <= (less than or
	equal to) and >= (greater than or equal to) all yield 0 if the
	spricified relation is false, and 1 if it is true"
and on page 190, Section 7.7,
	"The == (equal to) and the != (not equal to) operators are exactly
	analogous to the relation operators except for their lower precedence."
Please tell me if ANSI C has revoked these statements!
So...
In the first place, the program ought to print 0, since 1.0 == 2.0 is *false*.
In the second place, even if they were equal, it should print 1.000000.
Conrad
    
    
More information about the Comp.sys.sgi
mailing list