Arithmetic underflow とは

算術アンダーフロー(または「浮動小数点アンダーフロー」または単に「アンダーフロー」)という用語は、計算結果が、コンピュータがそのCPU上のメモリ内で実際に表すことができるよりも小さな絶対値の数であるコンピュータプログラムにおける条件である。
算術アンダーフローは、浮動小数点演算の真の結果が、ターゲットデータ型の通常の浮動小数点数として表現可能な最小値よりも小さい(つまり、ゼロに近い)ときに発生する可能性があります。アンダーフローは、部分的に浮動小数点値の指数の負のオーバーフローと見なすことができます。たとえば、指数部が-128〜127の値を表すことができる場合、-128より小さい値を持つ結果がアンダーフローを引き起こす可能性があります。

BKM algorithm とは

BKMアルゴリズムは、1994年にJean-Claude Bajard、Sylvanus Kla、Jean-Michel Mullerによって最初に出版された、基本関数を計算するためのシフト・アンド・アロッドアルゴリズムです。 BKMは、ヘンリー・ブリッグス(Henry Briggs)が対数を計算するために使用したアルゴリズムと同様の方法を使用して、複雑な対数(Lモード)および指数関数(Eモード)を計算することに基づいています。 BKMアルゴリズムは、負の2乗の対数の事前計算テーブルを使用することによって、整数加算、シフト、および比較演算のみを使用して基本関数を計算します。
BKMはCORDICに似ていますが、アークタンジェントの表ではなく対数の表を使用します。各反復において、係数の選択は、9つの複素数の組である1,0、-1、i、-i、1 + i、1-i、-1 + i、-1-iから行われる。 CORDICが使用する-1または+1のみ。 BKMは、いくつかの基本関数を計算する簡単な方法を提供し、CORDICとは異なり、BKMは結果スケーリング係数を必要としません。 BKMの収束率は、CORDICのように反復ごとに約1ビットですが、複雑なオペランドの対数がテーブルに格納されるため、BKMは同じ精度で事前計算されたテーブル要素を多く必要とします。
shift-and-addクラスの他のアルゴリズムと同様に、BKMはハードウェアの実装に特に適しています。多項式または有理数近似のような他の方法と比較したソフトウェアBKM実装の相対的性能は、高速マルチビットシフト(すなわち、バレルシフタ)またはハードウェア浮動小数点演算の利用可能性に依存する。

Test and test-and-set とは

コンピュータサイエンスでは、マルチプロセッサ環境での相互排除を実装するために、テストおよび設定されたCPU命令が使用されます。正しいロックはテストセットで実装できますが、ビジーロックでリソースの競合が発生する可能性があります(バスをロックし、テストおよび設定操作でメモリにアトミックにアクセスする必要がある場合)。
オーバーヘッドを下げるために、より精巧なロックプロトコルテストとテストセットが使用されています。主なアイデアは、テストセットでスピンするのではなく、ロックに対する以下のエントリプロトコルを使用して、テストとセットの成功の可能性を高めます。
 boolean locked:= false //共有ロック変数手続きEnterCritical(){do {while(locked == true)//ロックがフリーになるまでスピンをスキップする} TestAndSet(locked)//実際の原子ロック}
終了プロトコルは次のとおりです。
 プロシージャExitCritical(){locked:= false}
エントリプロトコルは、通常のメモリ読み出しを使用してスピンを行い、ロックが解放されるのを待ちます。テストとセットは、通常のメモリ読み取りではフリーであると判断されたときにロックを取得するためにのみ使用されます。したがって、高価な原子メモリ演算は、単純なスピン・アラウンド・テスト・セットよりも頻繁に起こる。
使用されるプログラミング言語が短絡評価をサポートする場合、入力プロトコルは次のように実装できます。
 プロシージャEnterCritical(){while(locked == trueまたはTestAndSet(locked)== true)skip //ロックされるまでスピンします}

Floating point error mitigation とは

浮動小数点エラーは、実数を一般に固定された空間で正確に表現することができないために発生します。定義上、浮動小数点エラーは排除することができず、せいぜい管理することしかできません。
H. M. Sierraは、1956年の特許で「電卓の浮動小数点算術演算の制御手段」と述べた。
したがって、いくつかの条件の下では、重要なデータ桁の大部分はレジスタの容量を超えている可能性があるため、結果は完全に間違っていなくてもほとんど意味がないかもしれません。
最初のコンピュータ(リレー)は1936年に浮動小数点演算でZuseによって開発されたため、浮動小数点エラーの影響を受けました。しかし、初期のコンピュータは、ミリ秒で測定された動作時間で、複雑で大きな問題を解決することができず、浮動小数点エラーに悩まされたことはほとんどありませんでした。しかし今日では、ペタフロップで測定されたスーパーコンピュータのシステム性能(1秒あたりの浮動小数点演算数)が1015であり、浮動小数点エラーは計算上の問題解決にとって大きな懸案事項です。さらに、浮動小数点エラーには、キャンセルと丸めの2種類があります。取り消しは、2つの同様の数値を減算し、有意なビットで丸めが発生した場合には保存できず、丸められたり切り捨てられたりする場合に発生します。キャンセルエラーは、丸め誤差に対して指数関数的です。
以下のセクションでは、浮動小数点エラーを緩和するさまざまな手段の長所と短所について説明します。

MPIR (mathematics software) とは

MPIR(Multiple Precision Integers and Rationals)は、GNU複数精密算術ライブラリ(GMP)プロジェクトからフォークされたオープンソースのソフトウェア多重精度整数ライブラリです。これは、過去のGMPリリースからの多くのコードとオリジナルの貢献したコードで構成されています。
MPIR開発者によると、MPIRプロジェクトの主な目標のいくつかは次のとおりです。
 グラフィックス処理ユニット(GPU)や他のマルチコアプロセッサのサポートを含む、多値演算のための並列アルゴリズムの開発。 GMPとの互換性を維持する – MPIRをGMPの代替品として使用できるようにする。 Linux、Mac OS、Solaris、およびWindowsシステムの構築サポートを提供します。 32ビットおよび64ビットバージョンのWindowsで使用するためのMicrosoftベースのビルドツールを使用してMPIRを構築することをサポートします。
MPIRは、多くのプロセッサ(CPU)に最適化されています。 ARM、DEC Alpha 21064,21164、および21264、AMD K6、K6-2、Athlon、K8およびK10、Intel Pentium、Pentium Pro-II-III、Pentium 4、汎用x86、 Intel IA-64、Core 2、i7、Atom、Motorola-IBM PowerPC 32,64、MIPS R3000、R4000、SPARCv7、SuperSPARC、汎用SPARCv8、UltraSPARCなどがあります。

Residue number system とは

残差数値システム(RNS)は、より小さな整数のセットを使用する大きな整数を表し、計算をより効率的に実行することができる。それは4世紀の広告でSunzi Suanjing(マスターサンの算術マニュアル)からの数学的な考え方である、その操作のためのモジュラー算術の中国の剰余定理に依存しています。

Minifloat とは

計算では、ミニフローは非常に少ないビットで表される浮動小数点値です。予想通り、汎用数値計算にはあまり適していません。それらは特別な目的のために使用され、反復が小さく、精密さが美的効果を有するコンピュータグラフィックスで最も頻繁に使用される。さらに、浮動小数点演算やIEEE 754のプロパティや構造を示すために、コンピュータサイエンスコースの教育ツールとして頻繁に遭遇します。
16ビットの小立ては半精度の数値です(単精度と倍精度に反対)。 8ビット以下のミニフロートもあります。
ミニフロートは、IEEE 754規格の原則に従って設計することができます。この場合、正規化された数と正常な数との間のフロンティアの規則(明示的に記述されていない)に従わなければならず、無限大とNaNの特別なパターンを持たなければならない。正規化された数値は、バイアスされた指数とともに格納されます。標準の新しいリビジョンIEEE 754-2008には、16ビットバイナリミニフローがあります。
Radeon R300とR420 GPUは、7ビットの指数と16ビット(+1暗黙的)の仮数を持つ浮動小数点フォーマット "fp24"を使用していました。 Direct3D 9.0の「完全精度」は、独自の24ビット浮動小数点形式です。 MicrosoftのD3D9(Shader Model 2.0)グラフィックスAPIは当初、ATIのR300チップのようなFP24とNvidiaのNV30チップのFP32の両方を「フル・プレシジョン」としてサポートし、FP16は頂点シェーダとピクセルシェーダの計算に「パーシャル・プレシジョン」としてサポートしましたグラフィックスハードウェアによって実行される。
コンピュータグラフィックスでは、積分値のみを表すためにミニフローが使用されることがあります。同時に異常値が存在するはずであれば、最小正規化数は1でなければならない。このステートメントは、バイアス値を計算するために使用することができる。次の例は、計算と基本原則を示しています。

Normalized number とは

適用された数学では、小数点の前にゼロでない小数点が1つある科学記法で書かれている場合、数値は正規化されます。したがって、正規化された科学記法で書き出されたときの実数は、次のようになります。
± d 0 . d 1 d 2 d 3 × 10 n {\displaystyle \pm d_{0}.d_{1}d_{2}d_{3}\dots \times 10^{n}}
nは整数で、 d 0 , {\displaystyle d_{0},} d 1 , {\displaystyle d_{1},} d 2 , {\displaystyle d_{2},} d 3 , {\displaystyle d_{3},} …は底の10の数字の桁で、 d 0 {\displaystyle d_{0}} はゼロではありません。すなわち、その先頭桁(すなわち、左端)はゼロではなく、小数点が続く。これは、科学記法の標準的な形式です。もう1つのスタイルは小数点の後に最初のゼロ以外の桁を持つことです。

Pairwise summation とは

数値解析では、カスケード加算とも呼ばれるペアワイズ加算は、積和演算の丸め誤差を実質的に減少させる一連の有限精度浮動小数点数を加算する手法であり、典型的にはより小さな丸め誤差を有するカハン和のような他の技法もあるが、ペアワイズ加算は対数ファクタだけでほぼ同等でありながら、はるかに低い計算コストを有している。純粋な合計と同じコスト(正確に同じ算術演算の数)。
特に、n個の数列x nの対の和は、シーケンスを2つの半分に再帰的に分割し、各半分を合計し、2つの合計を加算することによって作用する:分割および征服アルゴリズム。その最悪ケースの丸め誤差は、最大でもO(εlog n)のように漸近的に増加します。ここで、εはマシンの精度です(後述のように固定の条件数を仮定します)。これとは対照的に、和を累積する単純な手法(各x iをi = 1、…、nに対して一度に加える)は、O(εn)として最悪で成長する丸め誤差を有する。カハン和は、nとは無関係におおよそO(ε)の最悪ケース誤差を有するが、数倍の算術演算を必要とする。丸め誤差がランダムであり、特にランダムな符号がある場合、それらはランダムウォークを形成し、エラーの増加はペアごとの合計の平均 O ( ε log n ) {\displaystyle O(\varepsilon {\sqrt {\log n}})} に減少します。
加算の非常に類似した再帰的構造は、多くの高速フーリエ変換(FFT)アルゴリズムで見られ、それらのFFTの同じ遅い丸め積分の原因となります。
NumPyとJuliaテクニカルコンピューティング言語のデフォルトの加算アルゴリズムは、ペアワイズ加算です(どちらの場合も、大きな基底ケースを使用したため、単純な合計と同等のスピードを持つことがわかりました)。

Interval arithmetic とは

インターバル算術、区間数学、区間分析、または区間計算は、数学計算における丸め誤差および測定誤差の限界を定めるアプローチとして、信頼できる結果をもたらす数値的方法を開発するアプローチとして、1950年代および1960年代から数学者によって開発された方法です。非常に簡単に言えば、それは各価値を可能性の範囲として表しています。たとえば、標準的な算術を2.0メートルとして使用する人物の高さを推定するのではなく、インターバル算術を使用して、その人物が1.97メートルから2.03メートルの間のどこかにいると確信することができます。
このコンセプトは様々な目的に適しています。最も一般的な使用方法は、計算中に直接丸め誤差を追跡して処理し、物理的および技術的パラメータの正確な値を知る上での不確実性を追跡することです。後者は、多くの場合、構成要素の測定誤差および公差、または計算精度の限界のために生じる。インターバル算術演算は、方程式や最適化問題に対する信頼性が高く保証されたソリューションを見つけるのにも役立ちます。
数学的に、不確実な実数 x {\displaystyle x} を扱う代わりに x {\displaystyle x} を含む区間 [ a , b ] {\displaystyle [a,b]} の両端で作業します。区間演算では、任意の変数 x {\displaystyle x} a {\displaystyle a} b {\displaystyle b} の間にあります。 x {\displaystyle x} に適用されたときの関数 f {\displaystyle f} も不確実です。区間演算 f {\displaystyle f} では区間 [ c , d ] {\displaystyle [c,d]} が生成されます。区間 [ c , d ] {\displaystyle [c,d]} はすべての x [ a , b ] {\displaystyle x\in [a,b]} について f ( x ) {\displaystyle f(x)} のすべての可能な値です。