可以用c ++中的'rand()`来生成无偏的bool吗?

 你爱我像谁丶灬 发布于 2023-01-31 12:41

我写了以下功能

bool random_bool(double probability)
{
    double p_scaled = probability * (RAND_MAX+1) - rand();
    if ( p_scaled >= 1 ) return true;
    if ( p_scaled <= 0 ) return false;
    return random_bool( p_scaled );
}

给定,rand()从均匀分布生成一个{0,1,...,RAND_MAX-1,RAND_MAX}数字,后续调用中的数字可以被视为独立于除加密之外的所有实际目的,这应该true以概率返回p:两个if语句true以略低于概率的方式返回p,并且false概率略高于1-p,而递归调用处理其他所有事情.

但是,以下测试失败:

long long N = 10000000000; //1e10
double p = 10000.0 / N;
int counter = 0;
for (long long i=0;i

断言语句仅在0.1%的情况下失败.但它始终失败(counter介于10600和10700之间).

怎么了?

PS:我看过这个问题,但没有帮助......

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有