【问题标题】:Why does julia return non-zero for some big numbers?为什么朱莉娅对一些大数字返回非零?
【发布时间】:2020-10-31 09:32:56
【问题描述】:

在 Julia shell 中,当我想计算一些大数字时,它会为其中一些返回零,而对其他一些返回非零。


julia> 23^1023
-7505274568781129817

julia> 23^10233345345345345345345345
-524211381283076585

julia> 6^66
0

julia> 6^666567
0

julia> 6^666567467456456
0

为什么?正如我所知,当一个数字大于它的可变容量的两倍时,它的值将为零。但不是这样的。

【问题讨论】:

    标签: julia bignum


    【解决方案1】:

    这是整数溢出,参见手册https://docs.julialang.org/en/v1/manual/integers-and-floating-point-numbers/#Overflow-behavior

    您可以改用大整数(请参阅https://docs.julialang.org/en/v1/manual/integers-and-floating-point-numbers/#Arbitrary-Precision-Arithmetic):

    julia> big"23"^1023
    11157740226766098642576916479985732502550079026659668602369253176154754608347999114910934288598509169938542322634035543168104589454551803554752143514808871856407739044413061564710593969809293170387198434732839849079475397354914324959462224192710277582733000707189017630945088977603741349278943158891431873760538457405883290110683119304669609980551503814930814431431975534991573062542027069568527398640080137783572573628744292934799926441803784257928864905102312768281505257318699158791253710647692433095043904635807704217468279561767861663146318198088623674770926880080210309989765622294999800807236464408766346103653985201759420509533876924909908750714069885590356229608446855366913940019430671619981625609206032799826735265432172679241233520172523125869020169711024904402773853129665351797759891642127264888666794316949688983939775549154259963104480736117124292892646814620494489503114758819943362183681467998652454547183948074914858274708971403049788805953569337415595467715850757595901742734059151188466480831121544684493340167911965220743922762612303000346811165975512651283076102510848811008182559770140939825724297406037953883140920313402683491853674438512331534910835550559414659803452756567465225399126516307745943694271055034096963098307296535723190502271598318692446343365508448643996409450204836382025575710687700606126899558525256788416497673251704346550625698638155949249669830567
    

    等等

    【讨论】:

    • 我确定你没有回答我的问题 :) 我的问题是关于大数行为之间的这种差异
    • 我认为答案是正确的。可以添加的是,当且仅当您使用 Int64 值时,您想要获得的结果数可以被 2^64 整除,您将获得 0
    • (2k)^n mod 2^64 = 2^64 * 2^(n - 64) * k^n mod 2^64 = 0 不是 n >= 64 吗?在 64 次幂之后归零似乎发生在所有偶数上。 (不过,我不擅长数论。)
    • @phipsgabler - 这是正确的,但如果k 也能被2 整除,n 可以更小。
    猜你喜欢
    • 1970-01-01
    • 2018-11-27
    • 2016-05-09
    • 2023-03-30
    • 1970-01-01
    • 2014-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多