![[Show HN] 私は、互いに重なり合わない区間の集合上で動作する計算機を開発しました。](/_next/image?url=%2Fscreenshots%2F2026-04-19%2F1776553536654.webp&w=3840&q=75)
2026/04/18 10:15
[Show HN] 私は、互いに重なり合わない区間の集合上で動作する計算機を開発しました。
RSS: https://news.ycombinator.com/rss
要約▶
日本語翻訳:
改善されたバージョンが、詳細なキーポイントを反映させるために推奨されます。主要な欠落要素をすべて取り入れつつ、メインメッセージを明確に保つために再作成したサマリーは以下の通りです:
改訂版サマリー:
このテキストは、間隔ユニオン演算(Interval Union Arithmetic)を実装する専門的な計算機について記述しており、単一の実数ではなく区間の和集合上で動作し、数学的不確実性を効果的に処理します。区間
[a, b] は a と b の間に含まれ、かつ a および b 自体を含むすべての数を示し、和集合 [a, b] U [c, d] は不連続な区間の集合を表します。主な利点は、システムが演算に対して閉じており、ゼロを含む区間でも割り除法が可能であること(例:2 / [-2, 1] = [-∞, -1] U [2, +∞])です。また、入力から計算されたあらゆる真の実数値結果が出力和集合に含まれることを保証しており、不確実性の表現を支援します(例:50 * (10 + [-1, 1]) = [450, 550])。
フルプレシジョンモードでは、ツールは IEEE 754 ダブル精度浮動小数点数に対して外向き丸めを使用し、すべての真の無限精度値が計算された出力範囲内に厳密に含まれるようにします。入力は柔軟です:ユーザーは角括弧構文
[a, b] を使用して区間を入力することも、または単なる数値を入力することもでき、フルプレシジョンモードでは後者は狭い区間として解釈されます。サポートされている演算には足し算(+)、引き算(-)、掛け算(*)、割り算(/)、およびべき乗(^)が含まれます。サポートされている関数には三角関数(tan、cos、sin)、対数(log10)、根(sqrt)、絶対値(abs)、そして境界(lo(A)、hi(A))、および包囲殻(hull(A))が含まれます。
このツールには現在既知のバグが存在し、間隔計算機とそれを支える「not-so-float」エンジンともにオープンソースであり、GitHub でバグ報告が受け付けられています。今後のアップデートでは、フルプレシジョン制御を分割すること、
ans(答え)変数を追加すること、交差演算子を導入すること、U の演算子優先度を微調整すること、空の和集合入力に対応することを計画しています。全体的に、この計算機は従来の手法では処理できない不確実性及び特異点を含む複雑なシナリオへの解決を可能にするため、計算数学を発展させます。本文
これは何ですか?
これは、単なる実数ではなく「区間の和集合」を扱う電卓です。これは区間和集合算術(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]
区間和集合演算子
U を用いて、より複雑な区間の式も計算可能です:
➤ ( [5, 10] U [15, 16] ) / [10, 100]
[0.05, 1.6]
演算の結果として離散した和集合(不連続な区間の組)が得られる場合もあります:
➤ 1 / [-2, 1]
[-∞, -0.5] U [1, +∞]
➤ tan([pi/3, 2*pi/3])
[-∞, -1.732] U [1.732, +∞]
完全精度モードでは、通常の電卓として動作でき、浮動小数点の精度の問題にもかかわらず、真の値を必ず含む区間の結果を得ることができます:
➤ 0.1 + 0.2
[0.29999999999999993, 0.3000000000000001]
文法(Syntax)
| 演算 | 説明 | 例 |
|---|---|---|
| 区間 | | |
| 和集合 | | |
| 足し算 | | ➤ → |
| 引き算 | | ➤ → |
| 掛け算 | | ➤ → |
| わり算 | | ➤ → |
| 累乗 | | ➤ → |
| 関数 | | ➤ → |
| 定数 | | ➤ → |
備考: 区間は括弧記法
[1, 2] または括弧なしの裸数 3.14 の両方で入力できます。裸数は、細かな違いを考慮しつつ、狭い区間として解釈されます(すなわち [3.14, 3.14] とみなされます)。これにより、裸数と区間を自然に混在して使用することが可能です:
➤ 1.55 + [-0.002, 0.002]
[1.548, 1.552]
電卓の文法による驚きの副産物として、区間がネスト(入れ子)することもでき、以下のように記述できます:
➤
[0, [0, 100]]
[0, 100]
すべての数(境界を定義する括弧内の数も同様)は区間として解釈されるためです。2 つの区間を上記のようにネストしたとき、区間の境界としての区間は、その上限と同等となります。この設計判断により、区間の境界自体に対する算術操作が可能になります:
➤
[0, cos(2*pi)]
[0, 1]
対応する関数(Supported Functions)
| 関数 | 説明 | 例 |
|---|---|---|
| 定数 | , , , | ➤ → |
| 下限 | | ➤ → |
| 上限 | | ➤ → |
| 包絡(Hull) | | ➤ → |
| 絶対値 | | ➤ → |
| 平方根 | | ➤ → |
| 平方逆数 | | ➤ → |
| 自然対数 | | ➤ → |
| 底 2 の対数 | | ➤ → |
| 底 10 の対数 | | ➤ → |
| 指数関数 | | ➤ → |
| 余弦 | | ➤ → |
| 正弦 | | ➤ → |
| 正接 | | ➤ → |
| 逆余弦 | | ➤ → |
| 逆正弦 | | ➤ → |
| 逆正接 | | ➤ → |
| 最小値 | | ➤ → |
| 最大値 | | ➤ → |
完全精度モード(Full Precision Mode)
IEEE 754 デouble 精度浮動小数点数(JavaScript の
number タイプ)に対する外方向丸め処理が実装されており、結果の区間は、無限の精度を持つ実数上で同様の式を計算して得られる真の値を含むことが保証されています。例えば、電卓で有名な和 0.1 + 0.2 を試してみてください。区間算術は、0.3 が double 精度浮動小数点数として表現できないにもかかわらず、必ず 0.3 を含む区間を計算します。
完全精度モードが有効な場合:
- ユーザーが入力した数は、入力された十進表記に最も近い IEEE 754 値を含む最も狭い区間として解釈されます(ただし、両方の境界がその値と等しくならないようにします)。
- 出力数値は、利用可能なすべての小数位が表示されます(
を使用)。Number.toString()
完全精度モードが無効な場合:
- ユーザーが入力した数は、両方の境界が入力された十進表記に最も近い IEEE 754 値と等しい退化区間(幅ゼロ)として解釈されます。
- 出力数値は、最大で 4 桁の小数位が表示されます(
を使用)。Number.toPrecision()
バグ
非常に慎重に行ってきたつもりですが、電卓になんらかのバグが存在する可能性が高いです。どうか GitHub 上で問題を報告してください。
オープンソース
Interval Calculator および計算機を動かすエンジンである not-so-float はオープンソースです。もし私のオープンソースプロジェクトが気に入ったら、GitHub でスポンサーを検討していただければ幸いです。ありがとうございます ❤️
今後の仕事(Future Work)
- 完全精度モードを「入力の解釈」と「表示の精度」の 2 つのコントロールに分割する。
変数を追加する(直前の式の結果)。ans- 交差演算子または関数を追加する。
の優先順位をより直感的にする。U- 空の和集合の入力をサポートする。