Python Julia中的任意精度算法

Python Julia中的任意精度算法,python,julia,square-root,arbitrary-precision,continued-fractions,Python,Julia,Square Root,Arbitrary Precision,Continued Fractions,有人问过这个问题,但不是这样。我有一个小Python程序,它可以找到n(1的平方根的连分数,就像Python的decimal.decimal一样,您可以配置Julia的BigFloat的精度: setprecision(however_many_bits) 请注意,这是以位表示的,与decimal.decimal不同,因为BigFloat不使用decimal。user2357112的答案是问题的核心,也是这个问题的正确答案 然而,为了完整起见,“如何让这个python脚本在julia中运行”这

有人问过这个问题,但不是这样。我有一个小Python程序,它可以找到n(1的平方根的连分数,就像Python的decimal.decimal一样,您可以配置Julia的BigFloat的精度:

setprecision(however_many_bits)

请注意,这是以位表示的,与decimal.decimal不同,因为BigFloat不使用decimal。

user2357112的答案是问题的核心,也是这个问题的正确答案

然而,为了完整起见,“如何让这个python脚本在julia中运行”这一“字面”问题本身就是一个有趣的问题,因为它不像最初看起来那么简单,所以我也将展示如何做到这一点

假设在当前目录中有名为“testo.py”的python脚本(以及正确的
import decimal
语句等),那么下面介绍如何将其作为python模块导入并运行相关函数:

使用PyCall
取消移位!(PyVector(pyimport(“sys”)[“path”],“”);#根据https://github.com/JuliaPy/PyCall.jl#troubleshooting
testo=pyimport(“testo”);
testo[:oddporiodsquareroot]()#将输出'1322'

你记得为bigfloat配置精度吗?@user2357112没有,我怎么做?哦,我明白了,使用set_bigfloat_precision。事实上,这是使用setprecision。Julia函数中的更改…@user2357112 Man,我只是将精度设置为1000,这就解决了问题!非常感谢。谢谢,伙计。我实际上是用不同的方式编写了这段代码在当前方式之前使用ent方式。通过使用SymPy。它有点工作,但我得到了一个递归错误。我将在一个新问题中发布有关此的内容。感谢您的帮助。
setprecision(711)

function continuedFractionSquareRoots()
#=
  For each number up to 100, get the length of the continued fraction 
  of the square root for it.
=#

continuedFractionLengths = Int[]
for i=1:100

    # For perfect squares, the period is 0
    irrationalNumber = BigFloat(sqrt(BigFloat(i)))
    if irrationalNumber == floor(irrationalNumber)
        continue
    end

    continuedFractionLength = 0
    while true

        intPart = floor(irrationalNumber)
        if continuedFractionLength == 0
            firstContinuedFractionTimes2 = intPart*2
        end

        continuedFractionLength += 1
        if intPart == firstContinuedFractionTimes2
            # Have reached the 'period' end for this fraction
            break
        end

        fractionalPart = irrationalNumber - intPart
        irrationalNumber = BigFloat(1) / fractionalPart

    end

    push!(continuedFractionLengths, continuedFractionLength)

end


return continuedFractionLengths
end
setprecision(however_many_bits)