[Python-ideas] Adding a half-float (16-bit) type to PEP 3118 (and possibly the struct module?)

Eli Stevens (Gmail) wickedgrey at gmail.com
Fri Apr 1 03:09:37 CEST 2011


On Wed, Mar 30, 2011 at 5:32 PM, Eli Stevens (Gmail)
<wickedgrey at gmail.com> wrote:
> On Wed, Mar 30, 2011 at 5:06 PM, Raymond Hettinger
> <raymond.hettinger at gmail.com> wrote:
>> I think the struct module addition for float16 could be handled separately and much more easily (since a half would fit in a double, but a long long double won't).
>
> Okay, if no other objections get raised, I'll open a new issue for it
> (probably sometime tomorrow).

The issue is here:

http://bugs.python.org/issue11734

> Yes, I will try and compile/test CPython and build a patch for
> _struct.c from the current repo.

I am a little unclear as to the purpose of structmember.{h,c}; does
the .h file need a line for the half-float type along the lines of:

#define T_HALFFLOAT	21

And do PyMember_GetOne and PyMember_SetOne need corresponding entries
in their switch statements?  Something like:

    case T_HALFFLOAT:
        // FIXME: need half support
        break;
    case T_FLOAT:
        v = PyFloat_FromDouble((double)*(float*)addr);
        break;

And:

    case T_HALFFLOAT:{
        // FIXME: needs half support
        break;
        }
    case T_FLOAT:{
        double double_val = PyFloat_AsDouble(v);
        if ((double_val == -1) && PyErr_Occurred())
            return -1;
        *(float*)addr = (float)double_val;
        break;
        }

The unit tests I've added for the struct.pack and struck.unpack
functions don't seem to need it, but I want to make sure there isn't
something I'm missing.

Apologies if this should be moved to python-dev; just let me know and
I can repost there.

Thanks!
Eli



More information about the Python-ideas mailing list