不確かさ
Sounio が測定の不確かさを表現し、(将来的に)伝播させる方法。
不確かさ
科学計算のコードは測定値だらけで、測定値は決して厳密ではありません。Sounio は不確かさをコメントやスプレッドシートで管理するのではなく、第一級 データとして扱います。
いま動くこと(コンパイラの現状)
コンパイラは Knowledge<T> に対して 「黙って unwrap できない」 ルールを適用します(Knowledge<T> を参照)。これにより、エピステミック情報が意図的に捨てられる境界を明確にできます。
それ以上の自動不確かさ伝播は、どれだけエピステミック stdlib を使うか、どのコンパイラ機能/バックエンドを有効にするかに依存します。
仕様 / 意図された意味論
意図されたモデルは、標準的なメトロロジーの実務(独立入力に対する GUM 風の伝播)に従います:
c = a ± bのとき:u(c) = sqrt(u(a)^2 + u(b)^2)
c = a * bまたはc = a / b(相対形式):u_rel(c) = sqrt(u_rel(a)^2 + u_rel(b)^2), ただしu_rel(x) = u(x) / x
言語レベルの目標として、Knowledge<T> 上の演算は:
- 新しい点推定を計算し
- 不確かさを伝播し
- (必要なら)信頼度を更新し
- 来歴を追記します
実用的な指針
- できるだけ
Knowledge<T>のまま値を保持する。 - plain なデータへ渡す必要があるときは
unwrap(reason)を使い、理由を残す。 - PK/PD や neuroimaging などのドメインコードでは、不確かさと来歴を明示的にモデル化している stdlib モジュールを優先する。