a way to specily floating-point numbers as bit patters

ketmar via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Fri Jun 9 09:42:31 PDT 2017


Basile B. wrote:

>> oooops. "-0.166667 0xBE2AAAC1". it's not the same! (and yes, it matters).
>
> -0.166667f is not representable as a 32 bit float. The actuall value 
> that's stored is -0.16666699945926666259765625, hence the difference. See 
> https://www.h-schmidt.net/FloatConverter/IEEE754.html and enter your 
> value in the field labeled "You entered".

i'm completely aware about floating point values representation, and 
problems with bin->dec->bin conversions of floats. the post is about 
avoiding those conversions at all.

>> and this means that i can't inline my calculated values! each time i 
>> want to get floating value with a known bit-pattern, i have to store it 
>> as uint, and resort to ugly hack: 
>> `*cast(immutable(float)*)(&mytable[2])`.
>>
>> and i can't do this trick in CTFE, as such pointer tricks aren't 
>> permitted.
>>
>> i tried different workarounds, but they're all ugly. it would be very 
>> nice to have a way to define IEEE floating point numbers as bit-patterns 
>> in the language itself. what do you think?
>
> Yes, easy to do, a template alĂ  octal or hexString.

can you show it, please? remember, CTFE-able!


More information about the Digitalmars-d-learn mailing list