V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
Twins666
V2EX  ›  分享创造

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

  •  
  •   Twins666 · 3 天前 · 1006 次点击

    从 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 条附言  ·  2 天前
    附送一些 App 促销码
    13 条回复    2026-04-07 10:15:59 +08:00
    eBMm8zIi0Zq3
        1
    eBMm8zIi0Zq3  
       3 天前   ❤️ 1
    免费版本计算 1000 位太幽默了
    Twins666
        2
    Twins666  
    OP
       3 天前 via iPhone
    @eBMm8zIi0Zq3 我的错,太不好意思了,正在准备更新版本,预计下周上架,届时免费版也能计算 100 万位
    junyee
        3
    junyee  
       2 天前
    确实 1000 位 , STM32 都有资格加入嘲讽队列.
    Twins666
        4
    Twins666  
    OP
       2 天前
    @junyee 承认错误,虚心接受大家批评
    Twins666
        5
    Twins666  
    OP
       2 天前
    先分发 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  
       2 天前
    op 执行力超强,不过跑分有 geekbench ,还能多平台,单跑 iOS 似乎只能看看 A 系列的,一众 Android 也没法比
    Twins666
        7
    Twins666  
    OP
       2 天前
    @goodryb 就像我上文说的,主要还是对圆周率有个老旧的情怀。不想跟 geekbench 竞争,也没这个时间和精力。作为一个轻量级的跑分,玩玩还是可以的。至于 Android ,确实有这个打算开发对应的版本。另外,这个是苹果全平台的,可以跑在 M 系列 CPU 的 Mac 上。可以看看 Mac 的跑分,也能看看 Apple Watch 的跑分。我的 Apple Watch S10 的跑分是 100 万位 33 秒多点
    duxiansen
        8
    duxiansen  
       1 天前
    为啥每次兑换完都会重新下载一遍,但是都没解锁内购?
    Twins666
        9
    Twins666  
    OP
       1 天前 via iPhone
    @duxiansen 好像我用错了促销代码和优惠代码,苹果说前者正在被后者替代,晚点我生成一批优惠代码再重新发给大家,应该能实现解锁内购。再次感谢关注!
    Twins666
        10
    Twins666  
    OP
       1 天前
    请使用以下的优惠代码,应该可以永久激活内购,请大家试用。试用后,请尽可能帮忙在 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
       1 天前
    @duxiansen 我在 10 楼重新发了兑换码,这次应该没有问题,谢谢关注!
    duxiansen
        12
    duxiansen  
       1 天前
    这次没问题了,已兑换
    Twins666
        13
    Twins666  
    OP
       1 天前
    @duxiansen 感谢!方便的话,APP store 里给个评价
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   Solana   ·   5804 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 03:26 · PVG 11:26 · LAX 20:26 · JFK 23:26
    ♥ Do have faith in what you're doing.