Wygeneruj losową liczbę binarną ze zmienną proporcją bitów „1”

Potrzebuję funkcji do generowania losowych liczb całkowitych. (załóżmy, że Javalong wpisz teraz, ale zostanie to rozszerzone naBigInteger lubBitSet później.)

Najtrudniejszą częścią jest parametr P, który określa (niezależne) prawdopodobieństwo dowolnego bitu, w wyniku czego wynosi 1.

Jeśli P = 0,5, możemy użyć standardowego generatora liczb losowych. Niektóre inne wartości P są również łatwe do wdrożenia. Oto niekompletny przykład:

Random random = new Random();

// ...

long nextLong(float p) {
    if      (p == 0.0f)   return 0L;
    else if (p == 1.0f)   return -1L;
    else if (p == 0.5f)   return random.nextLong();
    else if (p == 0.25f)  return nextLong(0.5f) & nextLong(0.5f);
    else if (p == 0.75f)  return nextLong(0.5f) | nextLong(0.5f);
    else if (p == 0.375f) return nextLong(0.5f) & nextLong(0.75f); // etc
    else {
      // What goes here??
      String message = String.format("P=%f not implemented yet!", p);
      throw new IllegalArgumentException(message);
    }
}

Czy istnieje sposób na uogólnienie tego dla dowolnej wartości P między 0,0 a 1,0?

questionAnswers(7)

yourAnswerToTheQuestion