我必须通过解决自动生成非平凡输入测试数据的方法,在我的代码中包含实验数据。我该怎么做,考虑到我还必须考虑 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/