當物理定律與高精度計算相遇:我的新開源項目 N-Body
大家好,今天想和大家聊聊我計劃投入的下一個開源項目:n-body——一個天體運動模擬程序。
緣起:物理世界的純粹之美
多年前,我就曾被物理世界的簡潔與優雅所深深吸引,嘗試用 C++、JavaScript 和 C# 編寫過二維的天體運動模擬,特別是經典的三體問題和太陽-地球-月亮系統。
當看著完全由物理定律驅動的代碼,在屏幕上描繪出星辰的軌跡時,那種創造的喜悅與成就感,至今記憶猶新。這純粹是由興趣驅動的探索,是一種難以言喻的、源自代碼與自然規律共鳴的美妙感覺。

昔日的探索與瓶頸
然而,那時的探索充滿了遺憾與挑戰:
- 數值精度問題:當時的我對高級的數值微分方法(如龍格-庫塔法)了解不深,導致模擬的累積誤差很大,星辰的軌跡很快便會偏離現實。
- 計算工具匱乏:核心的瓶頸在于,C# 生態中缺少一個強大的高精度數值計算庫。這直接導致了我后來的開源項目
sdcb.arithmetic的誕生,但在當時,這塊拼圖是缺失的。 - 開發效率:在那個沒有 AI 輔助編程的年代,很多想法的驗證和代碼實現都相對低效。
如今,萬事俱備
時過境遷,如今再次審視 n-body 項目,可謂是水到渠成。幾塊最關鍵的拼圖已經湊齊:
- 理論知識的成熟:我對現代數值求解器,特別是像
ODE45、Cash-Karp等算法,有了更深入的理解,這為解決誤差問題提供了理論基礎。 - 核心工具的完善:我親手打造的高精度數值計算庫
sdcb.arithmetic(基于底層的 GMP 和 MPFR)已經發布并日趨成熟,它為 .NET 帶來了前所未有的計算能力。 - 開發效率的飛躍:AI 輔助開發的普及,極大地提升了我的編碼和研究效率。
這三塊重要拼圖的完成,讓我重新整理和審視 n-body 項目成為了一個自然而然的選擇。
挑戰與展望:追求極致性能的閉環
當然,這并不意味著前路一片坦途。sdcb.arithmetic 庫雖然可以實現方便的調用和極致的性能,但目前還無法兩者兼得。在 n-body 項目中,我的選擇非常明確:性能優先。
“能跑起來”絕不是勝利,我更關心的是:
- 性能基準:它能跑多快?相比于原生的
double類型,性能差距究竟有多大? - 結果對比:高精度計算能夠帶來哪些與
double截然不同的、更精確的模擬結果?
更重要的是,我希望形成一個良性循環:在 n-body 項目中獲得的性能優化經驗,將直接反哺到 sdcb.arithmetic 庫的改進中,讓這個基礎庫變得更加強大。
歡迎圍觀與加入
目前,n-body 項目的初始框架已經提交到 GitHub,一些敏銳的粉絲可能已經注意到了。感謝大家的關注!
感謝您讀到這里。如果這個項目讓您感到一絲興奮或好奇,不妨點個贊、加個 Star,或者加入我的 .NET 騷操作 QQ 群 (495782587),一起交流探討,見證這個項目的成長。


浙公網安備 33010602011771號