Оцените иррациональность с Джулией

Julia имеет встроенную константу pi, с типом Irrational.

julia> pi
π = 3.1415926535897...

julia> π
π = 3.1415926535897...

julia> typeof(pi)
Irrational{:π}

Начиная с SymPy, который имеет функцию N(), я хотел бы оценить pi (или другие Irrational s, такие как e, golden и т.д.), до n цифр.

In [5]: N(pi, n=50)
Out[5]: 3.1415926535897932384626433832795028841971693993751

Возможно ли это? Я предполагаю, что pi основан на его математическом определении, а не только на тринадцати десятичных знаках.

Ответы

Ответ 1

Конечно, вы можете установить точность BigFloat и использовать big(π). Обратите внимание, что точность двоичная; он подсчитывается в битах. Вы должны быть в безопасности, если вы установите точность, по крайней мере, на log2(10) + 1 раз число цифр, которое вам нужно.

Пример:

julia> setprecision(BigFloat, 2000) do
           @printf "%.200f" big(π)
       end
3.14159265358979323846264338327950288419716939937510582097494459230781640628620899862803482534211706798214808651328230664709384460955058223172535940812848111745028410270193852110555964462294895493038196

Здесь я установил точность немного выше, чем она должна быть всего на 200 цифр.

Цифры вычисляются в библиотеке GNU MPFR.

Ответ 2

У Julia есть интерфейс для пакета Sympy:

# Pkg.add("SymPy")  ## initial installation of package
using SymPy
julia> N(PI, 50)
3.14159265358979323846264338327950288419716939937508

Обратите внимание, что SymPy использует верхний регистр PI, чтобы отличить его от нижнего регистра PI в родной Джулии. Вам также понадобится встроенный Sympy, установленный на вашем компьютере, чтобы получить полную функциональность здесь.

Другие комментарии:

  • см. здесь для более подробного руководства по Julia SymPy с большим количеством хороших примеров.