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 · 82 天前 · 4895 次点击
    这是一个创建于 82 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    得到输出: 5000000000000002160500000000000000000617216

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

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

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

    地球上最好的大整数库应该是 c/cpp 的 gmp 。
    alsas
        30
    alsas  
       81 天前
    这是 Python 一个非常牛逼的语言特性
    threebr
        31
    threebr  
    OP
       81 天前
    @Vegetable 是啊,我好歹拿 python 炼丹发过会议,结果这个我真不知道。我要是初学者我也没这么震惊了
    flynaj
        32
    flynaj  
       81 天前 via Android
    Python 全部都是对象,非常方便,就是性能开销大一些
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1040 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 46ms · UTC 21:59 · PVG 05:59 · LAX 13:59 · JFK 16:59
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.