Problem in type conversion

addw at root44.UUCP addw at root44.UUCP
Thu Jan 19 16:19:51 AEST 1984


<<<<<To be eaten by mailers>>>>>
Roger L. Ferrel said:

>> What we see here with the:
>> 
>> 	inttype *= 0.5;
>> 		vs
>> 	inttype = inttype * 0.5;
>> 
>> is a weekness of most C compilers. It seems none of them handles float
>> operations very well when there are mixed types.  Of course the above is
>> a poor example since normally more efficent code would be generated by
>> using:
>> 
>> 	intype >>= 1;  /* how is this for getting off the subject? */

Unfortunately this is only guaranteed to work if:
1)	inttype is unsigned -plainly not the intention.
2)	inttype is positive, if inttype is negative it is undefined
what is put into the top bit; ie your negative number may become positive.
(A '1' will be inserted on a PDP11, but I assume that it is intended to write
portable programs. I don't know what other machines will do.)

There is little point in being efficient but wrong.
The only real alternative is:
	inttype /= 1;

	Alain Williams
	Root Computers Ltd, London.
	{ENGLAND}!ukc!root44!addw

PS, In England we spell the word that means 'lack of strength' as weakness,
& efficent as efficient.



More information about the Comp.lang.c mailing list