Hi Greg,

All good. I think you described it fine. The question I had was more on what 
the big picture was. Why do it at all?

And yes, there’d be a way to manipulate the bits to manually construct it, but 
in most languages, that’d be pretty ugly anyway.

Regards,

Greg

Dr Greg Low

1300SQLSQL (1300 775 775) office | +61 419201410 mobile
SQL Down Under | Web: https://sqldownunder.com<https://sqldownunder.com/> | 
About Greg:  https://about.me/greg.low

From: Greg Keogh <gfke...@gmail.com>
Sent: Tuesday, 5 July 2022 8:58 AM
To: Dr Greg Low <g...@sqldownunder.com>
Cc: ozDotNet <ozdotnet@ozdotnet.com>
Subject: Re: 53-bit double

I might have missed it earlier Greg but was the actual problem that this helps 
with? I was intrigued by the underlying problem.

I didn't express myself clearly originally. I was trying to convert a 64-bit 
random integer into a double and guarantee that all possible 2^53 floating 
values in the range 0 to 1 could result. Someone suggested that weird bit of 
earlier incomprehensible code, but it turns out a simple shift-and-multiply 
does that trick.

There are lots of modern PRNGs that generate 64-bits, like the xoroshift** that 
is being used in the latest Random class. But how do you convert 64-bits 
"perfectly" into doubles? I finally confirmed a correct way.

I'm still wondering if there is a way of manually constructing an IEEE 754 
number from the raw bits, but it makes my head hurt.

Cheers, GK

Reply via email to