Реализация Javascript Java-класса Random, который будет генерировать одинаковые последовательности с одинаковым начальным числом - PullRequest
0 голосов
/ 06 ноября 2018

1-й Я сделал несколько поисков здесь и через Google, пытаясь найти это заранее, извините, если я не использовал правильные условия поиска, чтобы найти его.

Я переписываю некоторый унаследованный код Java в Javascript, и у меня все это работает, за исключением генератора псевдослучайных чисел ... Мне нужна версия этого кода Javascript, чтобы иметь повторяемый вывод как в версиях Java, так и в версиях Javascript. этот код как таковой, я не могу использовать генератор RN Javascript ... Я также не могу изменить устаревший код, чтобы использовать другой генератор RN ....

Так что я надеюсь, что кто-то был в подобной ситуации и уже сделал это и записал / перенес Java RNG в Javascript?

Возможно ли, учитывая, что побитовые операторы javascripts работают только с 32-битным словом, в то время как Java RNG основан на 64-битном начальном числе ... очевидно, что потребуется две переменные, каждая из которых содержит 1/2 начального числа ...


С https://docs.oracle.com/javase/8/docs/api/java/util/Random.html

  • JavaSsetSeed делает

    (seed ^ 0x5DEECE66DL) & ((1L << 48) - 1)
    
  • , а затем делает

    (seed * 0x5DEECE66DL + 0xBL) & ((1L << 48) - 1)
    
  • и возвращение

    (int)(seed >>> (48 - bits)).
    

1 Ответ

0 голосов
/ 06 ноября 2018

Я создал класс ES6, который в моих тестах дает те же результаты, что и класс java.util.Random. До сих пор я реализовал только открытый метод .nextInt(), но он реализован с помощью защищенного метода .next(), поэтому другие открытые методы должны быть просты в реализации:

https://gist.github.com/raybellis/4c15a1746724be7bd03964e9d03e0c75

РЕДАКТИРОВАТЬ расширенная версия теперь доступна в качестве NPM:

https://www.npmjs.com/package/java-random

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...