CustomFloat

Andrei Alexandrescu SeeWebsiteForEmail at erdani.org
Thu Oct 16 21:56:14 PDT 2008


Bill Baxter wrote:
> On Fri, Oct 17, 2008 at 1:30 PM, Andrei Alexandrescu
> <SeeWebsiteForEmail at erdani.org> wrote:
>> I found myself in need for smaller and specialized floating point types,
>> where I configure the exact configuration (sign, mantissa, exponent, bias).
>> See http://en.wikipedia.org/wiki/Half_precision for a half precision number
>> slated for inclusion in IEEE 754r.
>>
>> Would it be interesting to add a CustomFloat template to phobos? I'm
>> thinking along the lines of:
>>
>> template CustomFloat!(bool sign, uint mantissa,
>>        uint exponent, uint bias)
>> {
>>    ...
>> }
>>
>> So half-precision numbers are:
>>
>> alias CustomFloat!(true, 5, 10, 15) HalfFloat;
>>
>> There are quite a few details to kink out but this is definitely doable.
>> Numbers like 24-bit floating point and even 8-bit floating point would be
>> easy to support too. For now CustomFloat would be intended exclusively as a
>> compact storage mechanism; only conversion to the standard floating points
>> would be implemented. Later, maybe we can get to implement some operations
>> natively at least on machines that support them in hardware. I wanted to
>> gauge interest in the topic.
>>
> 
> 
> In theory it would be great to have this in Phobos.  I say in theory
> because I haven't actually been in need of such a thing recently, but
> it is definitely handy to have if you're working with high dynamic
> range images (like from openEXR), or doing other GPU-related things.
> Is that the kind of thing you need them for too?  I've heard of using
> anything beyond 16-bit and 24-bit floats in the GPU/HDR world, though.
>  A full generic solution is probably overkill for that.

Yah, graphics is a big target for such types (and a big pusher for 
standardizing them). I need such numbers for different purposes, i.e. 
storing large arrays of probability distribution. In that case the range 
is [0, 1] and I need to cram those numbers in as little space as 
possible. I could definitely use a customized floating point layout.

Note that a fully generic implementation is not overkill; if there are 
two layouts to support, you might as well support any.


Andrei



More information about the Digitalmars-d mailing list