Wie kann man eine Folge von n zufälligen positiven ganzen Zahlen erzeugen, die sich zu einem gewissen Wert addieren?

Ich versuche, ein Array von Ganzzahlen zu generieren, das Zufälle enthält, die sich zu einem bestimmten Wert addieren. Hier ist mein Code:

<code>private long[] getRandoms(long size , long sum) throws Exception {
  double iniSum = 0;
  System.out.println("sum = " + sum);
  long[] ret = new long[(int) size];
  for (int i = 0 ; i < ret.length; i++) {
    ret[i] = randomInRange(1, sum);
    iniSum += ret[i];
  }

  double finSum = 0;
  for (int i = 0 ; i < ret.length; i++) {
    ret[i] =  Math.round((sum * ret[i]) / iniSum);
    System.out.println("ret[" + i +"] = " + ret[i]);
    finSum += ret[i];
  }

  if (finSum != sum) throw new Exception("Could not find " + size + " numbers adding up to " + sum  + " . Final sum = " + finSum);
  return ret;
}



private long randomInRange(long min , long max) {
  Random rand = new Random();
  long ret = rand.nextInt((int) (max - min + 1)) + min;
  System.out.println("ret = " + ret);
  return ret;
} 
</code>

Die Ergebnisse sind jedoch nicht genau, zum Beispiel:

Es wurden keine 100 Nummern gefunden, die 4194304 ergeben. Endsumme = 4194305.0

Ich glaube, ich verliere die Genauigkeit in diesem Punkt:

<code>(sum * ret[i]) / iniSum
</code>

Können Sie einen alternativen Algorithmus oder eine Korrektur in meinem Code empfehlen, mit der ich dieses Ziel erreichen kann?

Antworten auf die Frage(10)

Ihre Antwort auf die Frage