Если этот график что-то мне подсказывает, это то, что качество равномерного случайного распределения Mathematica намного лучше, чем реализация в Java
, которую вы показываете (я не утверждаю, что для любой реализации Java. Также, как отказ от ответственности, и чтобы не начинать пламенную войну, я уже некоторое время являюсь разработчиком J2EE и Mathematica, хотя, по общему признанию, имею больше опыта в последнем).
Вот аргумент. У вас есть 50000 точек и 50 бинов (гистограммы), что говорит о том, что у вас примерно 1000 пунктов на бин. Точнее, мы можем использовать эргодичность, чтобы привести проблему 50000 равномерно распределенных точек к 50000 независимым испытаниям, и спросить, каково среднее число точек, попадающих в каждую ячейку, и дисперсию. Вероятность того, что какой-либо конкретный контейнер окажется с k
точками из Npoints
, определяется биномиальным распределением:
Для которого среднее значение равно Npoints/Nbins
(что, естественно, мы и ожидаем интуитивно ожидаемо), а дисперсия в нашем случае Npoints * (1-1/Nbins)* 1/Nbins ~ Npoints/Nbins = 1000
(Npoints = 50000, Nbins = 50
). Взяв квадратный корень, мы получим стандартное отклонение как sqrt(1000) ~ 32
, что составляет около 3% от среднего значения (то есть 1000
). Вывод состоит в том, что для идеального равномерного распределения и для данного числа точек и бинов следует ожидать отклонения от среднего значения порядка 3% для каждого бина. И это очень похоже на то, что дает нам распределение Mathematica, судя по картине. Отклонения для отдельных бинов для распространения Java (опять же, конкретная реализация, представленная здесь) намного больше и предполагают корреляцию между бинами и тем, что в целом это равномерное распределение имеет гораздо худшее качество.
Теперь, это аргумент "высокого уровня", и я не буду вдаваться в подробности, чтобы выяснить причину. Это кажется логичным, однако, учитывая, что традиционная целевая аудитория для Mathematica (науки, научные круги) является (или, по крайней мере, раньше) гораздо более требовательной в этом отношении, чем для Java. Тем не менее, я не сомневаюсь, что существует много превосходных реализаций Java генераторов случайных чисел для многих статистических распределений - они просто не являются чем-то встроенным в язык, в отличие от Mathematica.