コンピュータサイエンスにおいて、数学ライブラリ(または数学ライブラリ)とは、プログラミング言語の標準ライブラリに含まれるコンポーネントであり 、三角法や指数関数といった最も一般的な数学関数(またはサブルーチン)が含まれています。C言語のように、 浮動小数点数に関連するビット操作や制御機能も含まれる場合があります。
例:
- C標準ライブラリの数学関数、[ 1 ]
- Java数学ライブラリ[ 2 ]
- Haskellの「Prelude.Math」。[ 3 ]
一部の言語(Haskellなど)では、標準ライブラリの一部(数学を含む)がデフォルトでインポートされます。[ 4 ]
線形代数などのより高度な機能は通常、線形代数ライブラリやベクトル数学ライブラリなどのサードパーティライブラリで提供されます。
実施概要
基本操作
数学ライブラリでは、浮動小数点数を同じサイズの符号なし整数として解釈するために、型パンニング(type punning)を使用することがしばしば有用です。これにより、特定の数値特性(正かどうか)の検査や数値比較を高速化できます。より高度なケースでは、ビット操作( bit twiddling )を使用して、数値を特定の方法で変更することがあります。
より正確な演算を行うには、double double形式やtriple double形式を使用する場合もあります。この場合、高精度の数値は2つまたは3つの浮動小数点数の和として表現されます。[ 5 ]
超越関数
対数関数、指数関数、三角関数といった超越関数は、あらゆる数学ライブラリの基盤を成しています。これらの関数は、一般的に多項式近似(通常はテイラー多項式、またはRemezアルゴリズム(誤差限界が改善されているという利点がある)によって導出されるチェビシェフ多項式)によって実装されますが、前処理手順も同様に重要です。[ 5 ]
三角法
値域の縮小(引数の縮小、定義域の分割とも呼ばれる)は、異常な値(無限大やNaN )のチェックが行われた後の、あらゆる関数の最初のステップです。ここでの目標は、関数の対称性と周期性(もしあれば)を使用して、処理する多項式のために引数の定義域を縮小し、例えば、最後に結果を否定するかどうか(必要な場合)を示すフラグを設定することです。周期関数は縮小時に入力よりも高い精度を必要とすることに留意すべきであり、そのプロトタイプ法は Payne–Hanek–Corbett アルゴリズムです。[ 6 ]値域の縮小後、ほぼゼロの値は「高速パス」の対象となる場合があります。たとえば、小さな入力x はsinに直接返すことができ、1 − | x |はcosに使用できます。
次のステップは、従来のホーナー法を用いて多項式を評価することです。その後、範囲縮小ルーチンからの情報に基づいて結果の符号を反転してから返します。
対数と指数
2 を底とする対数は比較的簡単です。整数部kが既に浮動小数点指数に含まれているためです。したがって、予備的な範囲縮小が実行され、kが生成されます。次に仮数部x (log2( x ) は -1/2 から 1/2 の間) が表および区間と比較され、既知の log2 と範囲内のx/zを持つzに縮小されます。さらに、 x/zが含まれる区間に使用される多項式係数も使用されます。結果は log( z ) + log( x/z ) + kとなります。[ 7 ]他の底の対数も同様のアプローチに従いますが、違いは (a) 別の表を使用すること、(b) kに log2(新しい底)を掛ける必要があることです。[ 7 ]
2を底とする指数関数も同様に、浮動小数点構造上の「基本ケース」です。この手順は、範囲の縮小(通常は参照による)と残りの仮数部に対する多項式の組み合わせです。[ 7 ]自然指数は精度のために別のテーブルを用いて実装できますが、exp10は範囲内であれば単にexp( x × log2(10))とすることができます。 [ 7 ]最後に、任意の底の指数関数pow()は、一般的なケースではexp()とlog()に基づいて構築されています。[ 7 ]
参照
参考文献
- ^ 「C 数学ライブラリ」。
- ^ 「Java数学ライブラリ」。
- ^ 「Haskell プレリュード数学」。
- ^ 「Haskellプレリュード」。
- ^ a bダラミー=ロワラ、カトリーヌ;デフール、デビッド。ディネシン、フロラン・デ;ガレット、マシュー。ガスト、ニコラス。ローター、クリストフ。ミュラー、ジャン=ミッシェル (2006 年 12 月)。CR-LIBM 倍精度の正しく丸められた初等関数のライブラリ(レポート)。
- ^ Brisebarre, N.; Defour, D.; Kornerup, P.; Muller, J.-M.; Revol, N. (2005年3月). 「新しい範囲縮小アルゴリズム」 . IEEE Transactions on Computers . 54 (3): 331– 339. doi : 10.1109/TC.2005.36 .
- ^ a b c d e musl v1.2.2 数学ディレクトリ、log1p.c、log2.c、log10.c、exp2.c