コンテンツにスキップ

英文维基 | 中文维基 | 日文维基 | 草榴社区

利用者:Meniv/sandbox/区間演算

区間演算とは、区間 (数学)に対する演算である。主に計算機で計算結果の誤差を保証するときに用いられる。

概要

[編集]

区間演算は計算の誤差をすべて包み込むために用いられる。演算には上端と下端を設定する方式と中心と誤差半径を設定する方式の2パターンがある。

上端・下端方式の演算は以下のように定義される。

[a, b] + [c, d] = [a+b, c+d]
[a, b] - [c, d] = [a-b, c-d]
[a, b]・[c, d] = [min{ac,bc,ad,bd}, min{ac,bc,ad,bd}]
[a,b] / [c,d] = [min{a/c,b/c,a/d,b/d}, max{a/c,b/c,a/d,b/d}]

この定義から0を含む区間での商は定義できないことは自明である。例えば[2, 3] / [0, 2]は実数の演算である2/03/0の演算が定義されていないため不可能である。

ここで、例えば区間[1, 2]の和についての逆元を考えてみよう。ゼロ元[0,0 ]となるのは[1-1,2-2]であるが、[1, 2]-[1, 2]=[-1, 1] ≠ [1, 1]となってしまうため逆元は存在しない。これは積に関してもいうことができる。[1, 2] / [1, 2] = [1/2, 2]となるからである。

すなわち、差や商は和や積の逆演算ではない。

  • 和:[-1, 2] + [-1, 2] = [-2, 4] ⇔ 差:[-2, 4] - [-1, 2] = [-4, 6]
  • 積:[-2, 3]・[2, 5] = [-10, 15] ⇔ 商:[-10, 15] / [2, 5] = [-5, 15/2]

実装

[編集]
C++ boost
boost::numeric::interval<T>
Python
pyinterval

参考

[編集]

関連項目

[編集]