Deutsch   English   Français   Italiano  
<868qx193ew.fsf_-_@linuxsc.com>

View for Bookmarking (what is this?)
Look up another Usenet article

Path: ...!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail
From: Tim Rentsch <tr.17687@z991.linuxsc.com>
Newsgroups: comp.lang.c
Subject: Challenge/exercise problem - signum() function
Date: Mon, 12 Aug 2024 08:17:11 -0700
Organization: A noiseless patient Spider
Lines: 53
Message-ID: <868qx193ew.fsf_-_@linuxsc.com>
References: <v8vlo9$2oc1v$1@dont-email.me> <v8vm2i$2oc1v$2@dont-email.me> <86y152in9n.fsf@linuxsc.com> <v9cpfm$38p3u$2@dont-email.me>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Injection-Date: Mon, 12 Aug 2024 17:17:15 +0200 (CEST)
Injection-Info: dont-email.me; posting-host="f42e4005105099d89c60a754521770ce";
	logging-data="3530086"; mail-complaints-to="abuse@eternal-september.org";	posting-account="U2FsdGVkX1+OI5OFdv8tKqDHFQOXPDetSEUGJszfCpI="
User-Agent: Gnus/5.11 (Gnus v5.11) Emacs/22.4 (gnu/linux)
Cancel-Lock: sha1:zQR3D3Q2rfprWkcFg1YSpbkOTQ0=
	sha1:dU3crBB1rY1fDjYQ1XJvCSy+gHk=
Bytes: 2710

Vir Campestris <vir.campestris@invalid.invalid> writes:

> On 12/08/2024 01:43, Tim Rentsch wrote:
>
[...]
>> Also, it would be better for your understanding of C if you would
>> stop thinking about what is going on at the level of actual
>> hardware.  Doing that serves to confuse a lot more than it helps.
>
> I think I feel my ears burning!

I'm taking that as a compliment. :)

Also as an impetus to post a small C exercise I've been meaning
to put up.

The goal is to write a C function to compute a signum() value:

    long
    signum( long k ){
        /* should return
         *      -1 if k < 0
         *      +1 if k > 0
         *       0 otherwise
        **/
        /* ... */
        return  0; /* appropriate return value to be supplied */
    }

Of course such a function is trivial to write.  The challenge
part is to write one that observes the following restrictions:

  * must work on any conforming C90 or C99 implementation,
    including freestanding implementations.  (Hence _Bool
    is out of bounds.)

  * statements must be limited to expression statements and
    one return statement at the end of the function (simple
    declarations are also okay).

  * no conditional compilation (#if, #ifdef, #ifndef, etc)

  * no pointers, casts, unions, or user-defined types

  * all operators that return "logical" values are off
    limits:  must not use !, <, <=, >, >=, ==, !=, &&, ||, ?:

To make things easier, you may assume 'long' has no padding
bits, and no trap representations (there may be negative
zeros though).

That's it.  Should provide some fun for those who want to
try it.