c - 我如何在 C 中生成随机 double ?

标签 c algorithm random double srand

我必须通过解决自动生成非平凡输入测试数据的方法,在我的代码中包含实验数据。我该怎么做,考虑到我还必须考虑 double 的数量类型?

这里有一些额外的上下文。来自本书的第 139 页 http://mimoza.marmara.edu.tr/~msakalli/cse706_12/SkienaTheAlgorithmDesignManual.pdf更准确地说是PDF的第151页,我必须解决问题4.3,我做到了。但是我需要为这个问题生成随机输入,而且因为我必须处理实数,所以很可能需要生成double 数字。问题是我不知道在生成实数时我应该为这种情况选择什么范围。

最佳答案

要在 [-DBL_MAX ....DBL_MAX] 范围内实现随机 double,并且任何 double 出现的机会都差不多, 随机填充一个 double。拒绝非有限的。

#include <math.h>
#include <stdlib.h>

double rand_finite_double(void) {
  union {
    double d;
    unsigned char uc[sizeof(double)];
  } u;
  do {
    for (unsigned i = 0; i < sizeof u.uc; i++) {
      u.uc[i] = (unsigned char) rand();
    }
  } while (!isfinite(u.d));
  return u.d;
}

由于每次循环迭代通常只生成 8 位,所以线性效率有点低。

关于c - 我如何在 C 中生成随机 double ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55766058/

相关文章:

python - iPython NoteBook 的 MathJax 符号帮助

linux - 如何将随机数写入文件?

c - C 中的三重斜杠注释?

我可以在结构中使用 "int"作为我的动态数组吗?

ruby - 删除数组中满足条件的最后一个匹配元素

c++ - 为什么这个递归算法对输入 2,147,483,647 给出错误答案?

Android:如何在 Activity 中随机放置一组按钮?

MySQL UPDATE 随机数在 1-3 之间

c - 为什么字符串函数在不包含字符串库的情况下也能正常工作?

c - 使用 typedef 的链接列表