Thread overview |
---|
March 29, 2015 reinterpret_cast float to uint | ||||
---|---|---|---|---|
| ||||
Hi, floats are stored on 32 bits using ieee754...and I would like (for some obscure reason) to reinterpret a such float into a 32 bits uint (i.e without altering the memory). A simple : import std.stdio; void main() { float f = 0.5; uint i = cast(uint)(f); writeln(i); } doesn't work since it just round the float. In C++, I do : reinterpret_cast<std::size_t&>(my_float). How could I do this in D ? Thanks in advance for your help ! |
March 29, 2015 Re: reinterpret_cast float to uint | ||||
---|---|---|---|---|
| ||||
Posted in reply to matovitch | On Sunday, 29 March 2015 at 13:39:47 UTC, matovitch wrote:
> Hi,
>
> floats are stored on 32 bits using ieee754...and I would like (for some obscure reason) to reinterpret a such float into a 32 bits uint (i.e without altering the memory). A simple :
>
> import std.stdio;
>
> void main()
> {
> float f = 0.5;
> uint i = cast(uint)(f);
> writeln(i);
> }
>
> doesn't work since it just round the float.
>
> In C++, I do : reinterpret_cast<std::size_t&>(my_float). How could I do this in D ?
>
> Thanks in advance for your help !
Ok this works :
import std.stdio;
void main()
{
float f = 0.5;
uint i = *cast(uint*)(&f);
writeln(i);
}
It is kind of logical...I feel a bit dumb. :D
|
March 29, 2015 Re: reinterpret_cast float to uint | ||||
---|---|---|---|---|
| ||||
Posted in reply to matovitch Attachments: | On Sun, 29 Mar 2015 13:45:10 +0000, matovitch wrote: you can also use unions. |
March 29, 2015 Re: reinterpret_cast float to uint | ||||
---|---|---|---|---|
| ||||
Posted in reply to ketmar | On Sunday, 29 March 2015 at 14:50:24 UTC, ketmar wrote:
> On Sun, 29 Mar 2015 13:45:10 +0000, matovitch wrote:
>
> you can also use unions.
Good idea ! In my case I think it was better to cast, but this could be helpful another time thanks ! :)
|
March 29, 2015 Re: reinterpret_cast float to uint | ||||
---|---|---|---|---|
| ||||
Posted in reply to matovitch Attachments: | On Sun, 29 Mar 2015 16:00:05 +0000, matovitch wrote:
> On Sunday, 29 March 2015 at 14:50:24 UTC, ketmar wrote:
>> On Sun, 29 Mar 2015 13:45:10 +0000, matovitch wrote:
>>
>> you can also use unions.
>
> Good idea ! In my case I think it was better to cast, but this could be helpful another time thanks ! :)
unions also looks better than pointers, and they are easier to read, i think. ;-)
union FU {
float f;
uint u;
}
void main () pure {
float t = 42.0;
assert((cast(FU)t).u == 0x42280000);
}
|
March 29, 2015 Re: reinterpret_cast float to uint | ||||
---|---|---|---|---|
| ||||
Posted in reply to ketmar | On Sunday, 29 March 2015 at 16:29:40 UTC, ketmar wrote:
> On Sun, 29 Mar 2015 16:00:05 +0000, matovitch wrote:
>
>> On Sunday, 29 March 2015 at 14:50:24 UTC, ketmar wrote:
>>> On Sun, 29 Mar 2015 13:45:10 +0000, matovitch wrote:
>>>
>>> you can also use unions.
>>
>> Good idea ! In my case I think it was better to cast, but this could be
>> helpful another time thanks ! :)
>
> unions also looks better than pointers, and they are easier to read, i
> think. ;-)
>
> union FU {
> float f;
> uint u;
> }
>
> void main () pure {
> float t = 42.0;
> assert((cast(FU)t).u == 0x42280000);
> }
AFAIK this would be undefined behaviour in C++, right?
|
March 30, 2015 Re: reinterpret_cast float to uint | ||||
---|---|---|---|---|
| ||||
Posted in reply to Namespace Attachments: | On Sun, 29 Mar 2015 17:33:02 +0000, Namespace wrote:
> On Sunday, 29 March 2015 at 16:29:40 UTC, ketmar wrote:
>> On Sun, 29 Mar 2015 16:00:05 +0000, matovitch wrote:
>>
>>> On Sunday, 29 March 2015 at 14:50:24 UTC, ketmar wrote:
>>>> On Sun, 29 Mar 2015 13:45:10 +0000, matovitch wrote:
>>>>
>>>> you can also use unions.
>>>
>>> Good idea ! In my case I think it was better to cast, but this could be helpful another time thanks ! :)
>>
>> unions also looks better than pointers, and they are easier to read, i think. ;-)
>>
>> union FU {
>> float f;
>> uint u;
>> }
>>
>> void main () pure {
>> float t = 42.0; assert((cast(FU)t).u == 0x42280000);
>> }
>
> AFAIK this would be undefined behaviour in C++, right?
i honestly don't remember. C++ itself is UB. ;-)
|
Copyright © 1999-2021 by the D Language Foundation