lzb1001 发表于 2023-3-23 12:59:11

Python 可以计算很大很大的数据,但是……

为什么print(2 ** 2 ** 32)无法计算出结果,而print( (2 ** 2) ** 32) 就可以计算出结果呢?

isdkz 发表于 2023-3-23 13:01:45

原因在于计算顺序和数值大小。

2 ** 2 ** 32的计算顺序是从右到左,因此首先计算2 ** 32,得到4294967296。然后再进行2 ** 4294967296,这个计算涉及的数值非常大,很容易导致计算机内存不足以存储结果,因此无法得到结果。

而(2 ** 2) ** 32的计算顺序是从左到右。首先根据括号计算2 ** 2,得到4。然后进行4 ** 32,这个计算涉及的数值较小,计算机可以轻松处理并给出结果。

所以,print(2 ** 2 ** 32)无法计算出结果,而print( (2 ** 2) ** 32)可以计算出结果的原因在于它们涉及的数值大小不同,从而导致计算难易程度的差异。

wp231957 发表于 2023-3-23 13:02:36

因为再大也是有极限的

2**2**32=2**4294967296   这个数值 普通pc机 是无法处理的

而另一个就是4**32当然这个数就比较小了

wp231957 发表于 2023-3-23 13:04:51

python 确实能处理不小的数值,不过 也没啥意义

>>> 2**16384
118973149535723176508575932662800713076344468709651023747267482123326135818048368690448859547261203991511543748483930925889766738130868742627452469834156500608087163436600489752214325161953144684595234570948213584703664746483098478471428096784561413847604433840488612290528685531323615869599988579010635701812081536332078096432371275716429061340687520241736532395026788008906751737227061083564754575578079343162221345190381785963069031134385065753936064964519328317829176765896540528511355613436979328172588801590841467528983253806341923488859989898062311402512167447205187243932132319840294270534136695127473901459381689828899444517340036461792837713807441134579184857359507717043764419174388964488537768473832224060823907906139947567533473978401649174262148522901484767233597789715839733422634973481144165307775825098892603089478960467615310425726014180682302758800344195145532770159807128158959716941396560843950498317125506228202662620004804214980820000206099343368123762385788062747972707287748283843870504803416463333701338540599804070190866238730160501818826257372376627924079893171770880790174026540793097641964887786960401751769193868798808800894425125882696968836419413394578015784436494605271365545490632718742853189510027869511932349680870363043619392759269234482081283429736447868686206416904245855513653205505050818989186684686379991764754729137157350070101519755909745304003303152068351821649419563669607774811059828490134361146921427412181049507797927555664516498385006205106651708464736946403664056933946483717218335295687391204264000361161878927819571005209456276130670355184033011064510199543516762668866962776382060434248035790641535421273294675607300690708887049612505006815665925276129766406549834749266179882406231221040927458456558726484641765016012317587403472626195728908146619765155383074442470969863475362777035622712614505254912522944804014911479568135987596851280857524427187145545408489498615502079480698093921565805531916564168110596645415995147690858312972150329881658514207306148088802176981833841712939687837145957584605258314292844724970369854812529577592093645002265142724994958070820396608284755092189115213332104801197388363657782553332598885215632543933502131531213408139045102125536370790349591696312592420116787719010893525591453948821689711794326937360863907447279275111671512710639642508135355313721355289053980260297864531979510097643293909192466022887891290065421011828729829870738215971718456954051540302917330729245439178956867421964076145117360061775218699191336683703388720158207162586824713310451331509727471344272834060664289040649663610444321775281122747002916285809372770104964649954022098398193278661320425422646424368961010742992319763868154583756177353556898453605362723442427710576092486402378162966552631491090696048807347521700512113631187043992576250866603256621375041669571991967422321060672472137347123402161354071218823990970197194394434748031421790388631776777992153989217733434436890755031880083354685234437032708928414750164058944848200125423738668007445734191093377489195968101651606910614990557242581089558693883306749020490036862416630196855300568704028509545048484007352864382657040376715728651238025510995451885701347658818930000413884971588313986607154757481647672763511643546280440111271139252918057079419342268681835321279906897224769719147426815791219597379419280729888695236110088026425880132092804001192815397080113074133955000329901592497825993697435872628614398052011245436927116770491035344080399248327097911712881140170384182058601614758284200750183500329358499691864066590539660709069537381601887679046657759654588001937117771344698326428792622894338016112445533539447087462049763409147542099248815521395929388007711172017894897793706604273480985161028815458787911160979113422433557549170905442026397275695283207305331845419990749347810524006194197200591652147867193696254337864981603833146354201700628817947177518115217674352016511172347727727075220056177748218928597158346744541337107358427757919660562583883823262178961691787226118865632764934288772405859754877759869235530653929937901193611669007472354746360764601872442031379944139824366828698790212922996174192728625891720057612509349100482545964152046477925114446500732164109099345259799455690095576788686397487061948854749024863607921857834205793797188834779656273479112388585706424836379072355410286787018527401653934219888361061949671961055068686961468019035629749424086587195041004404915266476272761070511568387063401264136517237211409916458796347624949215904533937210937520465798300175408017538862312719042361037129338896586028150046596078872444365564480545689033575955702988396719744528212984142578483954005084264327730840985420021409069485412320805268520094146798876110414583170390473982488899228091818213934288295679717369943152460447027290669964066816
>>>

lzb1001 发表于 2023-3-23 13:21:44

isdkz 发表于 2023-3-23 13:01
原因在于计算顺序和数值大小。

2 ** 2 ** 32的计算顺序是从右到左,因此首先计算2 ** 32,得到429496729 ...

谢谢两位大神的热心解答。

(2 ** 2) ** 32的计算顺序是从左到右。---这个容易理解

2 ** 2 ** 32的计算顺序为什么是从右到左?

isdkz 发表于 2023-3-23 13:24:35

lzb1001 发表于 2023-3-23 13:21
谢谢两位大神的热心解答。

(2 ** 2) ** 32的计算顺序是从左到右。---这个容易理解


这是Python中的一个设计。当你在表达式中有多个相同的幂运算符时,Python会从右到左地计算这些运算符,以避免歧义。

因此,在计算2 ** 2 ** 32时,Python会先计算2 ** 32,然后将结果作为左侧操作数与左侧的2进行幂运算。这就是为什么2 ** 2 ** 32的计算顺序是从右到左的。

wp231957 发表于 2023-3-23 13:25:24

lzb1001 发表于 2023-3-23 13:21
谢谢两位大神的热心解答。

(2 ** 2) ** 32的计算顺序是从左到右。---这个容易理解


那不是有括号的优先吗
python中幂运算就是右结合
页: [1]
查看完整版本: Python 可以计算很大很大的数据,但是……