我开发了一款圆周率计算器 App,挑战硬件性能的极限 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
Twins666

我开发了一款圆周率计算器 App,挑战硬件性能的极限

  •  1
     
  •   Twins666 22 天前 124 次点击

    从 Super PI 说起

    十几年前,DIY 装机是一件非常有仪式感的事情,每次装好一台新电脑,第一件事不是装游戏,而是跑分。

    记得当时有一款软件叫 Super PI ,它的界面非常简陋,功能也只有一个计算圆周率。选择计算 100 万位,点击开始,然后盯着屏幕,等它跑完。跑完的数字,就是你这台机器的”成绩单”。

    我至今记得第一次把计算时间从 30 多秒压到 20 秒以内时的兴奋。换了根内存条,速度快了 3 秒;超频到 3.6GHz ,又快了 2 秒。那种将硬件性能“可视化”的感觉,简单、直接、让人上瘾。

    一个念头

    随着 PC 时代的逐渐退场,我的设备变成了 iPhone 、iPad 和 Mac 。

    有一天,我突然想:我手上的 iPhone ,算 100 万位圆周率要多久?

    找了一圈,App Store 上的相关应用,要么是给小朋友背圆周率的,要么就是展示几十位小数的计算结果。没有一款应用,能让我像当年用 Super PI 那样,认真地跑一次大规模计算,然后和别人比较:“你的 iPhone 15 跑了多少秒?我的 iPhone 16 快了多少?”

    这个需求看起来可能很小众,但我知道,一定有人和我一样会感兴趣。

    于是,我决定自己动手做一个。

    算法的选择

    要做就做认真的。

    圆周率的计算算法有很多,从莱布尼茨公式到 Machin 类公式,我最终选择了 Chudnovsky 算法。原因很简单它是目前世界纪录保持者使用的算法,每一项能贡献约 14 位有效数字,收敛速度极快。

    但 Chudnovsky 算法只是公式层面的选择。真正决定性能的是实现层面: Binary Splitting (二分分裂):将级数求和转化为大整数的分治运算,避免了逐项累加导致的精度损失。 NTT (数论变换):大整数乘法的核心,将 O(n) 的复杂度降到 O(n log n)。 多核并行:充分利用 A 系列和 M 系列芯片的多核架构进行加速。

    这些听起来像是教科书上的名词,但真正写下去才知道,每一个技术实现背后,都是一个深坑。

    开发中的取舍

    精度 vs 速度,是我面临的第一个取舍。

    我没有使用任何第三方大数库,整个大整数运算( BigInt )完全从零开始用 Swift 实现。这意味着我可以对 Apple 芯片进行最细粒度的优化,但也意味着每个基础运算加、减、乘、除、取模、开方都得自己实现、调试,确保它们是正确的。

    一个 NTT 乘法的 bug 可能不会让 1000 位的结果出错,但可能在 100 万位时悄悄出问题。为了确保准确,我花了大量时间做交叉验证,逐位对比,确保每一位都是正确的。

    功能的克制,是另一个取舍。

    我本可以加入更多跑分功能、排行榜、社交分享等,但我最终选择了克制。这个 App 的核心就是:在你的设备上,认真计算一次圆周率,告诉你用了多长时间。

    在此基础上,我加了一些自己想要的功能: 数字搜索:想知道你的生日在圆周率的第几位吗? 分享卡片:设计过的卡片,记录你的设备、计算位数、耗时。 计算历史:追踪每次计算的成绩,见证设备性能的变化。 圆周率知识:关于 π 的趣味故事、历史和算法介绍。

    每个功能都是因为”我自己想用”才加的,而不是为了凑功能列表。

    一些感悟

    开发这个 App 的过程,本身就像一次性能测试测的是我自己。

    写 BigInt 时,我重新拾起了大学时代的数论知识,才发现那些曾经觉得”没什么用”的定理,竟然能让一个乘法快上百倍。

    调试多核并行时,我学到了一件事:并行计算不是免费的午餐。任务拆分、内存竞争、同步开销,最终的加速效果远不是”核心数倍”那么简单,能看到显著提升已经很值得欣慰。

    而在打磨 UI 时,我反复思考的是:如何让一个“等待计算完成”的过程不那么焦虑?进度百分比要平滑地前进,哪怕后台计算可能在某个阶段停滞。用户不需要知道每一步的具体细节,只需要看到数字在动,知道程序在跑。

    最后

    这个 App 注定不会成为大众产品。

    但如果你曾在深夜里盯着 Super PI 的进度条,等待一个数字来证明你的硬件没有白买;如果你好奇手中的设备在面对一个纯粹的数学问题时,能跑得多快

    那么,这个 App 就是为你做的。

    关于内购

    我知道很多人对内购持保留态度,因此我想诚恳地说明:这个 App 绝对不会影响你基本的使用体验。免费版本可以计算最多 1000 位圆周率。如果你希望计算更多位数,或者想尝试更多高级功能,比如数字搜索、多核并行计算等,可以选择 Pro 版本,价格比一杯咖啡还便宜。

    我的初衷并不是为了推销,而是提供一个让你体验硬件性能并享受数学之美的工具。内购只是为了让你在体验过程中,能够更好地使用它,并支持我的持续开发。

    下载链接: https://apps.apple.com/app/pi-digits-calculator/id6761232095

    算一次 π,看看你的设备有多快。

    第 1 条附言    20 天前
    附送一些 App 促销码
    14 条回复    2026-04-25 09:00:51 +08:00
    eBMm8zIi0Zq3
        1
    eBMm8zIi0Zq3  
       21 天前   1
    免费版本计算 1000 位太幽默了
    Twins666
        2
    Twins666  
    OP
       21 天前 via iPhone
    @eBMm8zIi0Zq3 我的错,太不好意思了,正在准备更新版本,预计下周上架,届时免费版也能计算 100 万位
    junyee
        3
    junyee  
       20 天前
    确实 1000 位 , STM32 都有资格加入嘲讽队列.
    Twins666
        4
    Twins666  
    OP
       20 天前
    @junyee 承认错误,虚心接受大家批评
    Twins666
        5
    Twins666  
    OP
       20 天前
    先分发 20 个促销码,请各位感兴趣的大佬试用。如果方便的话,麻烦使用后帮忙给个真实的评价。我目前正在准备新版本,新版本会加入压力测试功能,可以重复跑多次测试,看看成绩是否稳定。另外,新版本会把免费版的计算位数提高到 100 万位。预计新版本下周可以上架。对于目前免费版只能计算 1000 位的问题,再次向大家表示歉意! 20 个促销码如下:
    苹果 App Store:
    7F7N347WAEW4
    4EMH3NHFYF4Y
    YPLJAMNEK7YH
    FJJJA33HER6W
    P733L6PXXANY
    L9FA796JHXE7
    PRFRXA7339A3
    37KWLNKKEAR9
    TL3YEH4THKRE
    3HJLYJNMP36M
    TH4XLW44MJ4X
    7WK6ARF4TJYL
    TEJJ6KMM63YX
    KFJTT9JPJXLA
    RTWLFRKHYAAR
    MLPALEXTR7KH
    KNLLKJ7LFAMW
    4LJNKMYAFPNR
    3K3NA9M9RRYK
    W6NFR9L7N7FE
    goodryb
        6
    goodryb  
       20 天前
    op 执行力超强,不过跑分有 geekbench ,还能多平台,单跑 iOS 似乎只能看看 A 系列的,一众 Android 也没法比
    Twins666
        7
    Twins666  
    OP
       20 天前
    @goodryb 就像我上文说的,主要还是对圆周率有个老旧的情怀。不想跟 geekbench 竞争,也没这个时间和精力。作为一个轻量级的跑分,玩玩还是可以的。至于 Android ,确实有这个打算开发对应的版本。另外,这个是苹果全平台的,可以跑在 M 系列 CPU 的 Mac 上。可以看看 Mac 的跑分,也能看看 Apple Watch 的跑分。我的 Apple Watch S10 的跑分是 100 万位 33 秒多点
    duxiansen
        8
    duxiansen  
       20 天前
    为啥每次兑换完都会重新下载一遍,但是都没解锁内购?
    Twins666
        9
    Twins666  
    OP
       20 天前 via iPhone
    @duxiansen 好像我用错了促销代码和优惠代码,苹果说前者正在被后者替代,晚点我生成一批优惠代码再重新发给大家,应该能实现解锁内购。再次感谢关注!
    Twins666
        10
    Twins666  
    OP
       19 天前
    请使用以下的优惠代码,应该可以永久激活内购,请大家试用。试用后,请尽可能帮忙在 App Store 里给个评价,非常感谢!之前的代码有问题,请大家忽略。
    苹果 App Store:
    LFX6MEXAKLTEF7EREW
    TXFE68KR6NY78YWKLM
    66YY3LLNX63MY44LRA
    7KH7JRFRMLY8YWYA8N
    JY3F86AYFE63KRM4NX
    L4HNX4P7XX8FFN6AYP
    WJL44HWT7X3TF4YXWF
    HT3EPP7F6EYLNYLT3E
    KFHL6FH3JAKM63PKHR
    WFRPP6MW7KFF7FXJEW
    XH4TXMFL34XHF8H3KE
    FFH4A4HHHAJ3WK6Y3K
    868RM8FMPF66N8YJ6T
    HAKFR38YHY3PHEYFP7
    MJPPHLXEJHYJK4FTMW
    7Y6NPLXLRX8NWJLYAR
    KXWN7FLNF4XMHT7LLK
    F3JYNAF7WTRJJWAAJT
    3ERXJFANFXRAFETFLR
    PYH3NHRHM84AKYXNE4
    Twins666
        11
    Twins666  
    OP
       19 天前
    @duxiansen 我在 10 楼重新发了兑换码,这次应该没有问题,谢谢关注!
    duxiansen
        12
    duxiansen  
       19 天前
    这次没问题了,已兑换
    Twins666
        13
    Twins666  
    OP
       19 天前
    @duxiansen 感谢!方便的话,APP store 里给个评价
    Twins666
        14
    Twins666  
    OP
       1 天前
    版本更新了,新增了全球排行榜功能,特别想看到大家的苹果设备成绩如何。感兴趣的可以装一个玩玩:
    下载链接: https://apps.apple.com/app/super-pibench/id6761232095
    兑换码如下:
    LFX6MEXAKLTEF7EREW
    TXFE68KR6NY78YWKLM
    66YY3LLNX63MY44LRA
    7KH7JRFRMLY8YWYA8N
    JY3F86AYFE63KRM4NX
    L4HNX4P7XX8FFN6AYP
    WJL44HWT7X3TF4YXWF
    HT3EPP7F6EYLNYLT3E
    KFHL6FH3JAKM63PKHR
    WFRPP6MW7KFF7FXJEW
    XH4TXMFL34XHF8H3KE
    FFH4A4HHHAJ3WK6Y3K
    868RM8FMPF66N8YJ6T
    HAKFR38YHY3PHEYFP7
    MJPPHLXEJHYJK4FTMW
    7Y6NPLXLRX8NWJLYAR
    KXWN7FLNF4XMHT7LLK
    F3JYNAF7WTRJJWAAJT
    3ERXJFANFXRAFETFLR
    PYH3NHRHM84AKYXNE4
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2805 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 38ms UTC 09:35 PVG 17:35 LAX 02:35 JFK 05:35
    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