如何枚举min和max之间的所有浮点值

rav*_*ava 1 c++ floating-point

对于唯一浮点值的有效随机数生成器,我想了解有关浮点值的更多信息.我将把问题分成两部分.

  1. 如何找出最小值和最大值(包括两者)之间有多少个浮点数?

我正在寻找该方法的实现:

size_t numOfFloats(const float min, const float max);
Run Code Online (Sandbox Code Playgroud)

在给定数据类型的最大精度的情况下,它考虑所有可能的浮点值.

  1. 如何在min和max之间枚举所有可能的浮点值(包括两者)?

我正在寻找该方法的实现:

vector<float> enumAllFloats(const float min, const float max);
Run Code Online (Sandbox Code Playgroud)

返回的向量的大小应始终等于我的第一个问题的方法的返回值.

如果需要,允许使用C++ 11.

stg*_*lov 9

您可以使用nextafterf枚举所有可表示的浮点数:

vector<float> enumAllFloats(const float tmin, const float tmax) {
  vector<float> res;
  for (float x = tmin; x < tmax; x = nextafterf(x, tmax))
    res.push_back(x);
  res.push_back(tmax);
  return res;
}
Run Code Online (Sandbox Code Playgroud)