c - 这段代码在哪里生成随机数?

标签 c random floating-point

我遇到了 rgba的浮点随机数生成器:

http://rgba.org/articles/sfrand/sfrand.htm

解释清楚,代码简单。有一个问题:我无法弄清楚随机位是从哪里来的。下面的代码片段:

static unsigned int mirand = 1;

float sfrand( void )
{
    unsigned int a;
    mirand *= 16807;
    a = (mirand&0x007fffff) | 0x40000000;
    return( *((float*)&a) - 3.0f );
}

我确实尝试过 compile this function并且始终得到 -0.995993 的结果,如果 mirand1 开头,这就有意义了。我错过了什么,或者 mirand 只是种子?

最佳答案

事实是,该代码不会生成随机数……它会生成伪随机 数。假设你从同一个种子开始,外行人想象正在发生的事情的方式是你只是在浏览一个巨大的“随机”数字列表。最终,数字会自己重复,但一个好的公式可以使这种重复以较大的间隔发生。

为了澄清,请看一下 Excel 使用的兰特公式:http://support.microsoft.com/kb/828795

关于c - 这段代码在哪里生成随机数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8109703/

相关文章:

c - 如何将 for 循环更改为 do while 循环

c - Zeroconf 名称解析

jQuery 选择具有相同类的随机元素

haskell - 如何在一个简单的猜谜游戏中跟踪猜测的次数(Haskell)

android - 从 String 解析浮点值时不正确,double 有效,为什么?

c - 左移浮点型

c - libexif 使可选

c - ulimit -c unlimited 命令如何使用,它有什么作用?

python - 使用 Python 从文本文件中创建一个包含 n 个单词的(随机)样本

rust - 我可以在不包装浮点类型和滥用 BTreeMap 的情况下使用标准库执行二叉树搜索吗?