我一直在网上寻找一个简单的在线 OpenCL 数字生成器。我找不到任何易于使用的东西。
我想要以下内容:
int generateRandomNumber(int fromNumber, int toNumber)
{
int num = functionOfRandomness();
return num;
}
如果有人知道我如何获得两个值之间的随机数的示例,将不胜感激。它不必是一个复杂的随机系统,只需简单快速地工作
谢谢
我从 geeks3d 的 Real-Time OpenCL Path Tracer 中提取了以下代码。内核是纯文本的。这是我第一次学习如何使用 OpenCL 的方式。
http://www.geeks3d.com/20120502/laguna-real-time-opencl-path-tracer/
float4 rand(uint2 *state)
{
const float4 invMaxInt = (float4) (1.0f/4294967296.0f, 1.0f/4294967296.0f, 1.0f/4294967296.0f, 0);
uint x = (*state).x * 17 + (*state).y * 13123;
(*state).x = (x<<13) ^ x;
(*state).y ^= (x<<7);
uint4 tmp = (uint4)
( (x * (x * x * 15731 + 74323) + 871483),
(x * (x * x * 13734 + 37828) + 234234),
(x * (x * x * 11687 + 26461) + 137589), 0 );
return convert_float4(tmp) * invMaxInt;
}
C 中的标准 rand() 函数将产生随机浮点数。
您只需要在您自己的函数中调用它并通过内部 RAND_MAX 变量调整输出。以下示例应在所需范围内生成一个随机浮点数。如果这是您需要的,您可以轻松地将结果转换为int 。
#include<stdlib.h>
float myrand( float setmin, float setmax )
{
float range = setmax - setmin ;
if(RAND_MAX>=range)
return ( setmin + rand()/(RAND_MAX/range) )
else
return ( setmin + rand()/(range/RAND_MAX) )
}