HNに表示: 非重複区間の集合で動作する計算機を作りました
概要
Interval Union Arithmeticは、実数だけでなく区間の合併上で計算を行う新しい電卓システム。
ゼロを含む区間での除算にも対応し、演算結果が閉じた集合として保たれる特徴。
不確実性の表現や浮動小数点誤差への耐性に優れる。
シンプルな構文で使いやすく、オープンソースで公開。
今後の拡張も活発に計画中。
区間合併演算電卓とは
-
Interval Union Arithmetic(区間合併演算)の実装例
- 区間 [a, b]:a 以上 b 以下の全ての数を表現
- 区間合併 [a, b] U [c, d]:重なりのない複数区間の集合
-
通常の区間演算の拡張
- ゼロを含む区間での除算が可能
- 例:2 / [-2, 1] → [-∞, -1] U [2, +∞]
- 閉じた演算体系の維持
- ゼロを含む区間での除算が可能
-
包含性質(Inclusion Property)
- 入力区間から任意の実数を選び、同じ式を実数で計算した場合、結果は必ず出力区間合併に含まれる
-
不確実性の表現
- 例:50 * (10 + [-1, 1]) → [450, 550]
-
複雑な式や合併演算もサポート
- 例:([5, 10] U [15, 16]) / [10, 100] → [0.05, 1.6]
主な演算例
- 加算:[90, 100] + [-2, 2] → [88, 102]
- 減算:[14, 16] - [8, 12] → [2, 8]
- 乗算:[-5, 10] * [2, 4] → [-20, 40]
- 除算:[2, 4] / [-1, 2] → [-∞, -2] U [1, +∞]
- 指数:[2, 3] ^ [-2, 3] → [0.1111, 27]
関数・定数サポート
- 定数:inf, ∞, pi, e など
- 下限・上限:lo([1, 2]) → [1, 1]、hi([1, 2]) → [2, 2]
- 絶対値・平方根:abs([-10, 5]) → [0, 10]、sqrt([9, 49]) → [3, 7]
- 対数・指数:log10([1, 10000]) → [0, 4]、exp([-∞, 0] U [1, 2]) → [0, 1] U [2.718, 7.389]
- 三角関数:cos([pi/3, pi]) → [-1, 0.5]、tan([pi/3, 2*pi/3]) → [-∞, -1.732] U [1.732, +∞]
- min/max:min([1, 2], [0, 6]) → [0, 2]、max([0, 10], [5, 6]) → [5, 10]
構文と使い方
- 区間表記:[a, b]、単独数値は [a, a] として扱う
- 合併演算:U で区間を合併
- ネストや関数も可能
- 例:[0, cos(2*pi)] → [0, 1]
- 例外的な合併例:1 / [-2, 1] → [-∞, -0.5] U [1, +∞]
フル精度モード
- IEEE 754倍精度浮動小数点に基づく
- 外向き丸めで常に真の値を含む区間を保証
- 入力値解釈・出力表示の切替が可能
- 例:0.1 + 0.2 → [0.29999999999999993, 0.3000000000000001]
バグ・オープンソース・今後の展望
- バグ報告:GitHubで受付
- エンジン(not-so-float)もTypeScriptで公開
- 今後の拡張
- フル精度モードの細分化
- 前回結果(ans)変数の追加
- 合併の優先順位改善
- 空集合入力サポート
区間合併演算の意義と背景
- 従来の区間演算ではゼロを含む区間の割り算が困難
- 例:1 / [-1, 2] → [-∞, +∞] または未定義
- 区間合併演算なら [-∞, -1] U [0.5, +∞] と明確に分離
- 非連続関数(tanなど)も閉じた体系で計算可能
- 2017年の論文「Interval Unions」(Schichl ら)に基づく理論
- TypeScript製のインタラクティブ電卓として実装
- 浮動小数点誤差にも強い設計
区間合併演算電卓は、数値計算における不確実性やゼロ割りなどの課題を柔軟に解決し、より信頼性の高い計算結果を提供する革新的なツールです。