簡體   English   中英

隨機數生成器但避免 0

[英]Random number generator but avoid 0

我正在生成一個范圍之間的隨機數,但我希望該數字不為 0。它可以是 0.1、0.2...等但不是 0。我該怎么做?

public float selectedValue;

void Start()
 {
    selectedValue = Random.Range(-0.5f, 0.5f);
 }

繼續尋找隨機值,直到它的值不為零

float RandomNumExceptZero (float min, float max){
  float randomNum = 0.0f;
    do {
        randomNum = Random.Range (min, max);
    } while (randomNum == 0.0f );
    return randomNum ;
}

基於@Psi 的建議,您可以這樣做:

public float selectedValue;
void Start()
{
    selectedValue = Random.Range(float.MinValue, 0.5f)*(Random.value > 0.5f?1:-1);
}

Random.Range()接受 2 arguments ,其中第二個參數是獨占的。 您可以通過排除值0來利用它來獲得優勢。 使用的邏輯是在-0.5f0 (不包括)之間找到一個隨機值。 使用另一個隨機化器獲得正值或負值

public float selectedValue;

void Start()
{
    selectedValue = Random.Range(-0.5f, 0);
    int sign = Random.Range(0, 2);

    // the value sign can be either 0 or 1
    // if the sign is positive, invert the sign of selectedValue
    if(sign) selectedValue = -selectedValue;
}

我只想指出,在區間[-0.5, 0.5)中有2,113,929,216 (*) 個浮點值,這給出了≈ 0.000000047305 %的機會恰好生成0.0f


(*)通過 C++ std::next_after蠻力發現,但兩種實現都應遵循 IEEE 754,所以我不希望在這方面存在語言差異,除非 Unity 以某種方式不使用次正規數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM