我目前的功能如下:
float random(){
return (float)rand_xor128()/UINT_MAX;
}
但后来我意识到,一旦将值转换为浮点值,就会失去精度,对吧?
我应该先把它转换成双倍吗?
float random(){
return (float)((double)rand_xor128()/UINT_MAX);
}
但是感觉不对。我该怎么办?
答案 0 :(得分:0)
您希望将32位值压缩到[0,1]范围内。这要求您能够在该范围内表示2^32
个不同的值。
float
总共有2 ^ 32个可能的值 。换句话说,浮子永远不会做你需要的。如果你返回一个double,你可能能够做到这一点(我没有运行数字来确定它),但除此之外,你将不得不编写自己的数据类型,它确实做了什么你需要。
但是如果将该值存储到浮点数中,则会失去精度,因为它在[0,1]范围内没有足够的精度来满足您的要求。