美文网首页Julia语言
Julia中的高精度计算

Julia中的高精度计算

作者: Julia语言 | 来源:发表于2018-08-29 08:04 被阅读54次

    欢迎关注Julia语言微信公众账号 julia_language

    原文链接:http://suo.im/4E6Knb

    微信公众号:Julia语言
    每周一三五更新,其他时间随机加餐;
    问题或建议,请公众号留言;

    高精度计算

    为保证整数和浮点数计算的精度,Julia 打包了 GNU Multiple Precision Arithmetic Library, GMP(https://gmplib.org/) 和 GNU MPFR Library (http://www.mpfr.org/)。Julia 相应提供了 BigInt 和 BigFloat 类型。
    也可以通过parse来构造:

    julia> BigInt(typemax(Int64)) + 1
    9223372036854775808
    
    julia> parse(BigInt, "123456789012345678901234567890") + 1
    123456789012345678901234567891
    
    julia> parse(BigFloat, "1.23456789012345678901")
    1.234567890123456789010000000000000000000000000000000000000000000000000000000004
    
    julia> BigFloat(2.0^66) / 3
    2.459565876494606882133333333333333333333333333333333333333333333333333333333344e+19
    
    julia> factorial(BigInt(40))
    815915283247897734345611269596115894272000000000
    

    然而,基础数据类型和 BigInt/BigFloat 不能自动进行类型转换,需要明确指定:

    julia> x = typemin(Int64)
    -9223372036854775808
    
    julia> x = x - 1
    9223372036854775807
    
    julia> typeof(x)
    Int64
    
    julia> y = BigInt(typemin(Int64))
    -9223372036854775808
    
    julia> y = y - 1
    -9223372036854775809
    
    julia> typeof(y)
    BigInt
    

    BigFloat 运算的默认精度(有效数字的位数)和舍入模型,是可以改的。然后,计算就都按照更改之后的设置来运行了:

    julia> setrounding(BigFloat, RoundUp) do
               BigFloat(1) + parse(BigFloat, "0.1")
           end
    1.100000000000000000000000000000000000000000000000000000000000000000000000000003
    
    julia> setrounding(BigFloat, RoundDown) do
               BigFloat(1) + parse(BigFloat, "0.1")
           end
    1.099999999999999999999999999999999999999999999999999999999999999999999999999986
    
    julia> setprecision(40) do
               BigFloat(1) + parse(BigFloat, "0.1")
           end
    1.1000000000004
    
    欢迎关注微信公众账号Julia语言.jpg

    相关文章

      网友评论

        本文标题:Julia中的高精度计算

        本文链接:https://www.haomeiwen.com/subject/kkqziftx.html