Using Boost.Random with fixed-point numbers

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

Using Boost.Random with fixed-point numbers

Boost - Users mailing list
I have a fixed-point number class (based on libfixmath) which in code
largely behaves like a float due to various operator overloading.

Now, I am trying to generate random numbers with them.
Uniform random is easy enough — just reinterpret some random bits as
my fixedpoint type.

However, I'd like to have other distributions, like
boost::random::normal_distribution.

But from what I can tell, Boost.Random might have some baked-in
assumptions about only working on float/double/long double.

Is that correct?

Or are there ways I can more-or-less transparently use
boost::random::xxx distributions with my custom type?

Basically, I want to know how much the <RealType> template argument
can be abused.

In std::random, there is some clear language[1], saying:
"The result type generated by the generator. The effect is undefined
if this is not one of float, double, or long double."

and I believe boost::random aims to be in agreement with std::random,
generally. But I could not find such clear language in the
Boost.Random docs.

Thanks
-John

[1] https://en.cppreference.com/w/cpp/numeric/random/uniform_real_distribution
_______________________________________________
Boost-users mailing list
[hidden email]
https://lists.boost.org/mailman/listinfo.cgi/boost-users
Reply | Threaded
Open this post in threaded view
|

Re: Using Boost.Random with fixed-point numbers

Boost - Users mailing list
AMDG

On 10/1/20 5:45 PM, John W via Boost-users wrote:

> I have a fixed-point number class (based on libfixmath) which in code
> largely behaves like a float due to various operator overloading.
>
> Now, I am trying to generate random numbers with them.
> Uniform random is easy enough — just reinterpret some random bits as
> my fixedpoint type.
>
> However, I'd like to have other distributions, like
> boost::random::normal_distribution.
>
> But from what I can tell, Boost.Random might have some baked-in
> assumptions about only working on float/double/long double.
>
> Is that correct?
>
> Or are there ways I can more-or-less transparently use
> boost::random::xxx distributions with my custom type?
>
> Basically, I want to know how much the <RealType> template argument
> can be abused.
>

Boost.Random works with custom floating point types, but I
don't recommend using it with fixed point.  The algorithms
will likely compile as long as you provide conversions
from built in numeric types and overloads of cmath functions,
but they are written with floating point in mind and may
lose precision when applied to fixed point.

> In std::random, there is some clear language[1], saying:
> "The result type generated by the generator. The effect is undefined
> if this is not one of float, double, or long double."
>
> and I believe boost::random aims to be in agreement with std::random,
> generally. But I could not find such clear language in the
> Boost.Random docs.
>

Boost.Random is generally more permissive than the standard.

> Thanks
> -John
>
> [1] https://en.cppreference.com/w/cpp/numeric/random/uniform_real_distribution
>

In Christ,
Steven Watanabe
_______________________________________________
Boost-users mailing list
[hidden email]
https://lists.boost.org/mailman/listinfo.cgi/boost-users