В конце концов, это доступно, если вы используете ccall. Я уверен, что в какой-то момент это будет легко, но вот способ сделать это сейчас, я не нашел способа использовать его из базы, но внесу поправку, если что-то изменится. Для этого необходимо сделать 2 вызова. Из документов gmp я выбрал mpz_urandomm.
Поддержка GMP
— Функция: void mpz_urandomm (mpz_t rop, gmp_randstate_t state, const mpz_t n) Генерирует равномерное случайное целое число в диапазоне от 0 до n-1 включительно.
Состояние переменной должно быть инициализировано вызовом одной из функций gmp_randinit (инициализация случайного состояния) перед вызовом этой функции.
Сначала нужно инициализировать генератор случайных чисел, я сделал это не оптимально, буду обновлять что-то дорабатывать.
— Функция: void gmp_randinit_default (состояние gmp_randstate_t) Инициализировать состояние с помощью алгоритма по умолчанию. Это будет компромисс между скоростью и случайностью и рекомендуется для приложений без особых требований. В настоящее время это gmp_randinit_mt.
метод вызова
Инициализировать ГСЧ
Не имея элегантного способа объявить gmp_randstate_t, просто объявите большой буфер. Это важно, иначе произойдет segfault.
julia> buffer = Array(Uint8,32);
julia> ccall((:__gmp_randinit_default,:libgmp),Void,(Ptr{Uint8},),buffer);
Генерация случайных чисел
Создайте BigInt, x для сохранения результата
julia> x = BigInt(0)
0
Установите y на MaxRange
Юлия> у = BigInt(2)^1000
10715086071862673209484250490600018105614048117055336074437503883703510511249361224931983788156958581275946729175531468251871452856923140435984577574698574803934567774824230985421074605062371141877954182153046474983581941267398767559165543946077062914571196477686542167660429831652624386837205668069376
Создать случайный х
julia> ccall((:__gmpz_urandomm,:libgmp),Void,(Ptr{BigInt},Ptr{Uint8},Ptr{BigInt}),&x,buffer,&y)
проверять
джулия> х 9301165293246235069759966068146313776551258669855356477271940698500929939755418247622530571466332330697816620308003246225290293476785304004840090056840661553451916748315356563734257724978000166406621823207925733850455027807451108123161768212073821382033500073069184011344280494573919716117539236653172
и т.д...
julia> ccall((:__gmpz_urandomm,:libgmp),Void,(Ptr{BigInt},Ptr{Uint8},Ptr{BigInt}),&x,buffer,&y)
джулия> х 5073599723113217446035606058203362324610326948685707674578205618189982426100515602680640230141018758328161278469759835943678360952795440512680380424413847653984694781421269745198616340362470820037933917709243387214511018480191308767310495781355601069937334945556566243556239048498564021992916827796124
person
waTeim
schedule
26.07.2014
rand
не имеет метода, соответствующего rand(::BigInt), и вариант Range просто пытается выполнить вычисления, используя вариант без диапазона. Можете ли вы обойтись с Int128, пока не будет исправлено? - person waTeim   schedule 26.07.2014rand(1:big"2"^1000)
теперь отлично работает для меня в Julia 1.1.0. - person Julia Learner   schedule 01.02.2019