
2026/03/08 5:43
CAS番号(化学物質登録番号)
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
CasNumは、コンパスと定規を用いた幾何学的構成により任意精度算術を実装するPythonライブラリです。数値は平面上の点としてエンコードされ、加算・乗算・除算・論理ゲートなどの演算は、線/点、円、直線と円の交点などの5つの基本的な幾何学プリミティブから構築されます。最適化には、2倍による特殊ケース乗算や剰余計算で最高位ビット(2のべき乗)を除去する手法が含まれています。
このライブラリはGame BoyエミュレータのALUに組み込むことを想定しています。CasNumを統合するには、PyBoy の
opcodes_gen.py を編集するだけで、他のエミュレータコードは変更されません。使用例としては、単純なRSA実装(python3 -m examples.rsa)や、幾何学ベースの算術のみで動作させるポケットモンスター 赤版(python3 -m examples.basic)があります。初回起動に約15分かかりますが、その後はPython の lru_cache によりほぼ 0.5–1 FPS で再起動できます。
ビュアースクリプト (
casnum/cas/viewer.py) は幾何学的構成を可視化し自動ズームします。RSA例では手動ズームが必要になる場合があります。依存関係は、sympy(コア)、可視化用のオプション pyglet、テスト用 pytest‑lazy‑fixtures、RSA 用 pycryptodome、および任意で Euclid Postulate V です。インストールは git clone --recursive の後に pip install -r requirements.txt を実行します。使用している ROM(2048.gb)は zlib ライセンス、CasNum コアコードは MIT ライセンス、PyBoy は LGPL v3.0 でライセンスされており、このプロジェクトはオープンソースや教育プロジェクトに適しています。本文
CasNum(コンパスとストレートエッジ・ナンバー)
コンパスとストレートエッジを用いた任意精度算術ライブラリ。
また、すべてのALUオペコードが幾何学的構成のみで実装された機能付き改良版Game Boyエミュレーターも同梱しています。
目次
- コンパスとストレートエッジ構成への導入
- 想定利用例
- Game Boy エミュレーター内への統合
- サンプル実行方法
- 哲学
- パフォーマンス
- 依存関係
- FAQ
- ライセンスと第三者クレジット
1. コンパスとストレートエッジ構成への導入
本プロジェクトは、
cas/ ディレクトリにある単純なコンパス・ストレートエッジエンジンから始まりました。この構築法では、2 点を起点にします。
- 原点
- 単位点
エンジンは5 つの基本操作(ISA)を提供します:
- 2 点を通る直線を作成
- 1 点を含み、別の点を中心とする円を作成
- 平行でない 2 本の直線の交点を求める
- 直線と円(交差すれば)の交点を求める
- 円 2 個の交点(交差すれば)を求める
この5つの構成が、以降のすべての算術演算の核となります。
CasNum クラスは数 (x) を点 ((x,0)) として表現します。算術は幾何学的プリミティブで構築されます:
- 加算 – 中点 + 倍増
- 乗算・除算 – 三角形の相似性
- 論理演算(AND, OR, XOR) – より複雑だが実装可能
最適化としては次のようなものがあります:
- 2 倍を専用構成で行う
- 剰余は、まず除数の最大の 2 のべき乗倍を引いてから計算
2. 想定利用例
| 利用ケース | 説明 |
|---|---|
| 簡易 RSA | 大整数演算を示す |
| Game Boy ALU | CPU の ALU を CasNum に置き換え、完全に幾何学的なエミュレーターにする |
| その他 | (追加アイデア歓迎) |
最初の2例は
examples/ 内にあります。注意:円を「平方」させることはできませんが、Pokémon Red は実行可能です。
3. Game Boy エミュレーター内への統合
PyBoy との統合は最小限で、
opcodes_gen.py のみ編集しました。
4. サンプル実行方法
# リポジトリをクローン(サブモジュール付き) git clone --recursive git@github.com:0x0mer/CasNum.git cd CasNum # 依存関係のインストール pip install -r requirements.txt # 内蔵例を実行 python3 -m examples.basic python3 -m examples.rsa
ライブラリは構成を可視化するビューア(
casnum/cas/viewer.py)を提供します。自動ズーム機能がありますが、必要なら手動で制御できます。
PyBoy の実行
- ROM を入手(例:
は zlib ライセンス下で自由配布可)。2048.gb
に置く。examples/PyBoy/- そのディレクトリから:
cd examples/PyBoy pip install -r requirements.txt PYTHONPATH=../.. python
Python 上では次のように使用します。
from pyboy import PyBoy from casnum import viewer viewer.start() # オプション:可視化開始 pyboy = PyBoy('2048.gb') # または任意 ROM while pyboy.tick(): pass pyboy.stop()
Pokémon の最初の起動には約15分かかりますが、以降は約0.5〜1 FPS で実行できます。
5. 哲学
現代開発者は
a + b をプリミティブとみなすことが多いですが、CasNum は2 円から中点を構築し、単純なループカウンタでも必要に応じて4 次方程式を解くべきだと主張します。
6. パフォーマンス
を使用して計算コストの高い処理をメモ化。functools.lru_cache- メモリ使用量は急激に増大する可能性があるため注意が必要です。
| 複雑度 | 備考 |
|---|---|
| 時間 | キャッシュ状態次第で変動(定量化未実施) |
| 空間 | キャッシュ結果とともに増大 |
7. 依存関係
sympy
(オプション、可視化用)pyglet
(テストのみ)pytest-lazy-fixtures
(RSA サンプルのみ)pycryptodome
(オプション)Euclid Postulate V
8. FAQ
| 質問 | 回答 |
|---|---|
| ゲームを動かせる? | 「動かす」ことはできません。数値ライブラリです。 |
| 高速ですか? | 手作業で Euclid を追いかけるより速くはありますが、ネイティブ整数演算には到底及びません。 |
| なぜ作ったのか? | 任意精度算術を実現し、コード上で幾何学体験をしたかったからです。 |
9. ライセンスと第三者クレジット
- ルートリポジトリ:MIT License
- PyBoy(改良版):LGPL v3.0 –
内にありますexamples/PyBoy/ - 2048.gb ROM:zlib ライセンス
免責事項: 本ソフトウェアは「現状のまま」保証なしで提供されます。