MachinePrecision

MachinePrecision
機械精度を示すために使われる記号である.

詳細詳細

予備知識
予備知識

  • MachinePrecisionは,機械精度計算において,Wolfram言語のNNIntegrateNSum等の数値関数で使われる,小数点以下の桁数を表す記号である.MachinePrecisionの数値は$MachinePrecisionによって与えられる.これは,自身がに等しい機械精度数である.記号式として使われた場合,MachinePrecisionは値が2進数の53桁精度に相当する53/Log2[10]の厳密な数値として扱われる.
  • 一般に,Wolfram言語の数値および画像関数は,計算に使用する所望の数値精度を制御する1つあるいは複数の精度オプションを取る.中でも最もよく使われるオプションに,WorkingPrecision(内部計算で保持すべき精度の桁数を指定する)とPrecisionGoal(最終結果で目標とする精度の有効桁数を指定する)がある.MachinePrecisionは,すべてのプロット関数とほとんどの数値関数,およびCompile(明示的に呼び出された場合と自動コンパイルの最中に背後で呼び出された場合の両方で)の,デフォルトの作業精度である.
  • 機械精度数(単に「機械数」と呼ばれることも多い)は,常に固定された桁数の数字を持っているが,精度についての情報を保持していない. そのような数についての指数および仮数は別々に保存することができるが,その「スケール」は指数の可能な範囲によって制限されたままである.この種の固定精度数を使った演算は,浮動小数点演算として知られており,IEEE浮動小数点演算標準(IEEE 754)を使って実装されることが多い.機械精度計算は,ネイティブな浮動小数点単位と非常に高速(特に行列演算については高速)であることが多い低レベルのライブラリ操作を使って行われることが多いが,計算中の数値の丸めやその他の要因による精度の低下は記録しない.結果として,機械演算は高速ではあるが,正しい値とは大きく異なる,数値的に有効ではない結果を与える.
  • 機械演算に加え,Wolfram言語は,精度にタグを付けた「任意精度」数を含む「有効数字の計算規則」による演算を許容する.その名前が暗示するように,任意精度数は任意の桁数を含み,結果として,計算を通して伝播できる精度情報を含んでいる.この技術を使うと,最終的な数値結果がもとの数より桁数が少ないことがあるが,返された桁は数値的に有効である.
  • MachinePrecisionは,特別な数値化関数Nのデフォルトの精度目標(つまり,最終結果の所望精度)である.ゆえに,N[expr]を使うことは,2引数の形のN[expr,prec]precMachinePrecisionに設定することに等しい.prec を記号のMachinePrecisionに設定することは,数値$MachinePrecisionを設定することとは全く異なることを理解することは重要である.特に,前者は数値化して機械数にするが,後者は有効桁数が指定された任意精度に数値化する.例えば, N[Pi,MachinePrecision]N[Pi,$MachinePrecision]は与える結果が異なる.InputFormまたはFullFormを使ってもとになっている数値表現を見ることができる.これは,機械数では小数点以下が16桁以下であり,任意精度数では の形の式である.機械精度あるいは任意精度でもとになっている二進数はRealDigits[expr,2]を使って抽出することができる.
  • 数値に対して明示的な数値精度 prec を指定するときは,数を「バックティック」構文の を使って入力する.より一般化すると,SetPrecision[expr,prec]を使ってすべての数が精度 prec を持つような expr を返し,prec が数,MachinePrecisionあるいはInfinityとして指定できるようにすることができる. 近似数のは特別なケースである.これは,精度を持たず,従って,たとえ明示的な有限精度を与えられていても,強制的に機械精度に戻される.Precision[expr]を使って指定された式の数値精度を求めることができる.
  • 明示的な桁数の小さい数字を使って指定された数は,機械精度であるとみなされる.つまり,Precision[0.123]MachinePrecisionを返す.より一般化するなら,近似実数は,$MachinePrecisionより少ない明示的な桁数で入力された場合には,MachinePrecisionで指定された精度を持つものとみなされる.これよりも多い桁数が指定された場合は,その数に指定された桁に対応する精度が割り当てられる(Precision[0.12345678901234567]Precision[0.123456789012345678]).
  • 任意精度と機械精度の両方の数を含む計算では,必要に応じてすべての数が強制的に機械精度にされる.さらに,この強制は,任意精度数の精度がMachinePrecisionより小さい場合にも行われる(例:N[E,30] + N[Pi]N[E,3] + N[Pi]は両方とも機械数を返す).また,MachinePrecisionを必要とするが,結果の数が53桁を使って表示するには大きすぎるあるいは小さすぎる計算の場合には,結果が自動的に任意精度数として返される(例: N[Exp[1000],MachinePrecision]).
  • 同じ型の機械精度数と任意精度数は同じHead(例:RealまたはComplex)を持つ.しかし,機械精度数はStandardFormでは最大で6桁表示なのに対し,任意精度数はすべての有効桁が表示される.MachineNumberQ[expr]は,expr が機械精度の実数あるいは複素数であればTrueを返し,それ以外の場合はFalseを返す.数と式を検証するのに役立つその他の関数には,NumberQNumericQExactNumberQInexactNumberQがある.
  • 有効桁数をWolframシステムが実行されているコンピュータシステムの生の機械語で与える$SystemWordLengthや特定のコンピュータシステムで使用可能な最大の機械精度数を与える$MaxMachineNumber とは異なり,MachinePrecision (および$MachinePrecision)は,プラットフォームやオペレーティングシステムに依存することなく,常に同じ値を持つ.
2003年に導入
(5.0)