【问题标题】:How to generate random or pseudo-random floats?如何生成随机或伪随机浮点数?
【发布时间】:2023-01-03 12:28:53
【问题描述】:

我正在尝试制作一个主要使用浮点来表示位置、速度等的粒子系统。我需要一个随机数生成器来为其中一些值生成随机浮点数。

我试过random(),但它的数据类型是long,所以浮点数被四舍五入为 0。这是 Arduino(在 C++11 上),所以它与普通的 C++ 有点不同,就像你一样不能使用<iostream><random>等。

【问题讨论】:

  • 这回答了你的问题了吗? Random float number generation
  • 嗯...丢弃<random> 库的三个原因:它根本没有在 Arduino 上实现,或者它对于目标硬件来说太大了,或者它使用动态内存分配。第二个对我来说似乎不太可能。如果其他两个不适用(我手头没有信息......)那么你实际上可以轻松使用<random>

标签: c++ c++11 random arduino floating-point


【解决方案1】:

您可以使用的一个选项是生成一个随机整数,然后将其除以比例因子以获得特定范围内的随机浮点数。

例如:

float randomFloat(float min, float max) {
  // Generate a random integer between 0 and RAND_MAX
  int r = random();
  // Scale the integer to the desired range and return as a float
  return min + (float)r / ((float)RAND_MAX / (max - min));
}

【讨论】:

  • 谢谢。我会尝试一下,如果有效,请告诉您。
  • 我完全按照你说的做了,但它总是返回最小值(对我来说,那是 0.6)
  • float randomVelocity = randomFloat(-1.0, 1.0); 这个代码结果能输出吗?
  • 它输出 -0.99 但有时会更改为 -1.00(尽管这可能只是因为我调用函数的方式)
  • 如果您想要真正的随机数,请确保使用不同的值来随机播种 :)
猜你喜欢
  • 2010-10-15
  • 2015-08-07
  • 1970-01-01
  • 2014-10-30
  • 2012-02-12
  • 1970-01-01
  • 2012-11-04
  • 1970-01-01
相关资源
最近更新 更多