惊了! Python 居然可以计算任意长度的整数 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
threebr
V2EX    Python

惊了! Python 居然可以计算任意长度的整数

  •  
  •   threebr 2022-09-14 03:15:25 +08:00 6350 次点击
    这是一个创建于 1208 天前的主题,其中的信息可能已经有所发展或是发生改变。

    刷一个算法题,需要进行 30000 长度范围内( 1e30000 )的整数运算,我寻思难不成还要我自己实现一个大数的加减乘除?结果 python 居然自带这个功能。从 c 语言入门计算机的我甚至都不敢这么想。下面是例子:

    运行代码: a=10000000000000004321000000000000000001234433 b = a//2 print(b)

    得到输出: 5000000000000002160500000000000000000617216

    32 条回复    2022-09-15 00:34:47 +08:00
    Perry
        1
    Perry  
       2022-09-14 04:10:13 +08:00   2
    > There is no limit for the length of integer literals apart from what can be stored in available memory.

    https://docs.python.org/3/reference/lexical_analysis.html#integer-literals
    kennylam777
        2
    kennylam777  
       2022-09-14 05:24:14 +08:00   3
    所以 Python 是算及金融算的首, 先把算法好不用考元件的作方式
    leimao
        3
    leimao  
       2022-09-14 07:47:18 +08:00   1
    。。。这个是 Python 一个很著名的 feature
    thinkershare
        4
    thinkershare  
       2022-09-14 07:55:26 +08:00   1
    现在是 2022 年了, Javascript 一样支持任意长度的整数, 顺便说一下, 并不是任意长度, 有内存限制的
    ColorfulBoar
        5
    ColorfulBoar  
       2022-09-14 07:56:42 +08:00   13
    有没有可能……这个算法题……就是让你练习手写大数运算的?
    SingeeKing
        6
    SingeeKing  
    PRO
       2022-09-14 08:47:34 +08:00 via iPhone
    @thinkershare 不支持; js 只是浮点数而已,和 Python 完全不一样
    fgwmlhdkkkw
        7
    fgwmlhdkkkw  
       2022-09-14 09:08:53 +08:00 via Android
    @SingeeKing Bigint
    lysS
        8
    lysS  
       2022-09-14 09:53:05 +08:00   2
    厉害吗?
    性能换的
    lakehylia
        9
    lakehylia  
       2022-09-14 09:53:40 +08:00
    java 也有 BigInt
    lysS
        10
    lysS  
       2022-09-14 09:54:48 +08:00
    @kennylam777 #2 其他语言都有 big numbers 吧?
    thinkershare
        11
    thinkershare  
       2022-09-14 09:58:14 +08:00
    @lysS 2022 年不支持 big int 的语言才是少数, 主要是这个玩意性能差的要死. 特别是 Python 3 还合并了普通的 int 和 long, 反正 python 中所有的方便之处都是靠巨大性能代价换来的, 导致很多人写出来的 python 代码已经没救了, 因为到处都是性能的坑, 随便写一下就是 O(n)以上的复杂度,
    MoYi123
        12
    MoYi123  
       2022-09-14 09:59:42 +08:00
    @thinkershare 时间复杂度和编程语言有什么关系?
    laqow
        13
    laqow  
       2022-09-14 10:03:51 +08:00
    @kennylam777 大概仅限的原生 python 函数,统计的事还是得 R 和 matlab 。numpy 一个 type 写错翻车的地方都找不到。
    Bovmelo
        14
    Bovmelo  
       2022-09-14 10:26:26 +08:00
    @MoYi123 随便一个 tuple 你知道里面怎么实现的吗?
    dcsuibian
        15
    dcsuibian  
       2022-09-14 10:33:04 +08:00 via Android   2
    坐下,高级语言常规操作
    Jirajine
        16
    Jirajine  
       2022-09-14 10:39:54 +08:00
    @thinkershare big decimal literal 怎么就影响性能了。Python 性能最让人诟病的地方是 GIL ,为了简单方便的 c API 而牺牲性能。你要说复杂度 js 更差,没有专门的 iterator ,数组的 map/filter 等函数都是非 lazy 的。
    AV1
        17
    AV1  
       2022-09-14 10:41:18 +08:00 via Android
    @SingeeKing
    JS 已经内置 BigInt 了
    zthxxx
        18
    zthxxx  
       2022-09-14 10:57:05 +08:00
    @SingeeKing 各语言都有写法或类型上的支持的,包括 js

    lysS
        19
    lysS  
       2022-09-14 12:21:41 +08:00
    @thinkershare #11 我是说以一个包或者库函数之类的方式支持
    dqzcwxb
        20
    dqzcwxb  
       2022-09-14 14:13:23 +08:00
    这难道不是语言最基本的吗?
    lizytalk
        21
    lizytalk  
       2022-09-14 14:26:20 +08:00   1
    这是 Python 的一个很重要的 feature 。另外这个算法题的本意应该是让你练习大数计算的(虽然这件事用 python 写确实怪怪的)
    zznext
        22
    zznext  
       2022-09-14 14:30:27 +08:00
    我 C++ STL 支持大整数
    laolaowang
        23
    laolaowang  
       2022-09-14 15:01:54 +08:00
    @thinkershare 你这是从哪学来的知识?
    laolaowang
        24
    laolaowang  
       2022-09-14 15:12:33 +08:00
    @laolaowang 请忽略,看了半句话
    hxysnail
        25
    hxysnail  
       2022-09-14 15:54:38 +08:00   1
    想不想知道它是怎么实现的,我前面写过 Python 整数的源码剖析,哈哈

    int 对象,永不溢出的整数: https://fasionchan.com/python-source/builting-object/int/
    int 源码解析:如何实现大整数运算: https://fasionchan.com/python-source/builting-object/int-src/
    BrettD
        26
    BrettD  
       2022-09-14 16:02:28 +08:00 via iPhone
    @zznext STL 里面哪个类提供大整数功能?
    Vegetable
        27
    Vegetable  
       2022-09-14 16:05:26 +08:00
    看这个贴子感觉有点好笑,又感叹人的知识是非常有限的。且不说什么高深的知识。就算是这种几乎大家都知道的常识,也一定有人不知道。笑不出来了呀
    SteveLi77
        28
    SteveLi77  
       2022-09-14 16:44:37 +08:00
    另外一个有趣的点是 python 乘法使用的是 Karatsuba multiplication ,复杂度只有 3n^log3 (
    documentzhangx66
        29
    documentzhangx66  
       2022-09-14 16:50:21 +08:00
    其实就是大整数。

    地球上最好的大整数库应该是 c/cpp 的 gmp 。
    alsas
        30
    alsas  
       2022-09-14 16:54:45 +08:00
    这是 Python 一个非常牛逼的语言特性
    threebr
       
    threebr  
    OP
       2022-09-14 17:58:20 +08:00
    @Vegetable 是啊,我好歹拿 python 炼丹发过会议,结果这个我真不知道。我要是初学者我也没这么震惊了
    flynaj
        32
    flynaj  
       2022-09-15 00:34:47 +08:00 via Android
    Python 全部都是对象,非常方便,就是性能开销大一些
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     834 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 19:40 PVG 03:40 LAX 11:40 JFK 14:40
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86