【发布时间】:2016-11-04 15:42:52
【问题描述】:
我正在尝试通过蒙特卡洛方法评估统计问题。在这个问题中,我生成一个随机数并将其与存储在名为comms_reliability 的向量数组中的固定概率数进行比较。假设向量数组中只有一个变量,我将比较随机数和概率,如果随机数大于可靠性数,则计算结果。但是,向量数组也可以有两个值,在这种情况下,我将生成两个随机数并将它们与两个可靠性数进行比较。如果两个随机数都大于可靠性数,我正在计算场景。理论上,对于向量数组中的任意多个值,这可以继续下去。但是,由于想象力的失败,我只知道如何在 for 语句包含在多个 if 语句中的情况下编写代码
对于每个可能的情况。在这个实现中,我必须多次复制相同的代码行,并且它还限制了 commms_reliability 数组大小,可以根据我复制这些代码行来处理下一个数组点的次数来评估这些大小。我怎么能做到这一点,我只需要一个 if 语句。下面显示了我当前如何对其进行编码的示例。
int main(int argc, const char * argv[]) {
int sample_size = 1000000;
std::vector<float> comms_reliability = {0.6,0.6};
float tally = 0.0;
// rang() = random number generator
// if statement for comms_reliability array of size 1
if (comms_reliability.size() == 1) {
for (int i = 0; i < sample_size; i++){
if (rang() > comms_reliability[0]) tally = tally + 1.0;
}
}
// if statement 2 for comms_reliability array of size 2
if (comms_reliability.size() == 2) {
for (int i = 0; i < sample_size; i++){
if (rang() > comms_reliability[0] && rang() > comms_reliability[1]) tally = tally + 1.0;
}
}
// if statement 3 for comms_reliability array of size 3
if (comms_reliability.size() == 3) {
for (int i = 0; i < sample_size; i++){
if (rang() > comms_reliability[0] && rang() > comms_reliability[1] &&
rang() > comms_reliability[2]) tally = tally + 1.0;
}
}
【问题讨论】:
标签: c++ c++11 if-statement for-loop