trying to simplify an algorithm
Hui Zhou
zhouhui at wam.umd.edu
Mon Feb 28 07:49:58 PST 2005
On Mon, Feb 28, 2005 at 09:40:20AM +0000, Johan V. wrote:
>Hui Zhou wrote:
>
>> On Mon, Feb 28, 2005 at 01:36:32AM +0000, Johan V. wrote:
>>>How about:
>>>
>>>return ( a+b+c == 180 ) * (a>0) * (b>0) * (c>0) *
>>> ( 1 + (a==b) + (a==c) + (b==c) );
>>>
>>>0 : not a triangle
>>>1 : scalene
>>>2 : isosceles
>>>4 : equilateral
>>
>> Very Clever! Except ...
>>
>> 1. Obscured
>> 2. Wasting CPU clocks
>
>I know it's very obscured. Think about the wasted clock cycles for a minute,
>the above can be implemented without conditional jumps ...
Obscured mostly because it reles on the fact that compiler treats
boolean as 1 or 0, not a fact supposed to be relied on.
Wasting CPU because it asks the cpu to gothrough all the comparisons
and additional multiplication and summation. If the compiler is smart
enough ot optimize away multiplication of 0 and summation of 0, it
goes back to the original conditional jumps' version.
(a || b || c) && ... is known to be shortcut,
will (a+b+c) * ... be shortcut?
Frankly I am not sure whether gcc will optimize away those
multiplications and summations. I will appreciate it if you will find
out and let me know.
Cheers,
--
Hui Zhou
More information about the lfs-chat
mailing list