Do we really need all the types? I think that we can get by with just abs(), and probably even make it a #define which will eliminate the need for type checking anyway.
Only if you are really careful and make it a statement expression...
#define abs(_a) ((_a) >= 0 ? (_a) : -(_a))
...since this version ("the obvious version") suffers from double evaluation.
Segher