Wolfram Computation Meets Knowledge

Wolfram言語がサポートするコンピュータ演算のタイプ

Wolfram言語は以下の3つのタイプのコンピュータ演算をサポートします.

どのタイプも利点と欠点があるため,速く正確な結果を得るためにいつどれを使うかを理解することがWolfram言語プログラマーのツールボックスの重要な部分になります.この記事は,技術的な詳細には踏み込まずにそれぞれのタイプの概要を紹介することを目的としています.詳細はこの記事からリンクされているWolfram言語のドキュメントをご覧ください.

機械精度演算

機械精度演算が使われるのは,小数点の付いた数値(4.2や1.等)が入力されたとき,あるいはN関数が単独の引数で使われた(N[1/2]等)ときです.ほとんどの新しいコンピュータでは,機械精度演算は仮数(小数点以下の桁)が約16桁の結果を返します.

機械精度演算を使う主な利点はその速さです.任意精度の計算は通常機械精度の計算よりも何倍も遅くなります.

機械精度の計算は速いですが,正確さが重要な非常に大きいあるいは非常に小さい数を扱う場合や記号的な結果が要求されている場合は避けなければなりません.そのような場合はそれぞれ任意精度,無限精度を使います.

機械精度を使うときは,丸め誤差が追跡されないということも注意する必要があります.高速にするためにそうなっているのですが,誤った結果となる可能性があります.例えば,以下ではOut[1]は正しくありません.

In[1]:= N[Sin[10^50]]
Out[1]= -0.4805

In[2]:= N[Sin[10^50], 20]
Out[2]= -0.78967249342931008271

Wolfram言語の組込み数学関数のほとんどは,与えられた入力の精度に最もマッチする出力を提供します.これらの関数に機械精度の入力を与えると,機械精度の出力になります.以下はその例です.

In[3]:= Sin[4.2]
Out[3]= -0.871576

In[4]:= Precision[%]
Out[4]= MachinePrecision

同様に,1つの計算の中で機械精度の入力と任意精度あるいは無限精度の入力を組み合せると,結果は機械精度で与えられます.

In[5]:= 3 + 4.5
Out[5]= 7.5

In[6]:= Precision@%
Out[6]= MachinePrecision

数値計算演算子(NIntegrateNSumNDSolve等)はデフォルトでは機械精度を返します.

任意精度演算

任意精度演算数で計算を行う場合,Wolfram言語は常に精度を追跡します.通常Wolfram言語は,入力の精度に基づいて,可能な限り最高の精度で結果を返そうとします.

任意精度数は最も一般的には,第2引数を持つN関数を使うことで生成されます.例えばN[Pi, 20]はPiの数値結果を20桁精度まで与えます(3.1415926535897932385).

任意精度は非常に大きいあるいは小さい数を含む,高精度を要求する計算に便利です.しかし,任意精度の計算は機械精度の計算よりも遅いため,高精度が要求されていない場合は任意精度数は使われません.

機械精度数でもそうであるように,組込みの数学関数に任意精度入力を使うと,その結果は任意精度の出力になります.以下がその例です.

In[1]:= N[7, 30]^2
Out[1]= 49.0000000000000000000000000000

In[2]:= Precision[%]
Out[2]= 29.699

機械精度と任意精度の入力を組み合せると機械精度の出力になります.その結果誤差は追跡されません.

任意精度の式を評価する効率的な方法に,SetPrecisionを使うというものがあります.

In[3]:= SetPrecision[1.9658*(1.23423423/500 + 600/3.9879), 20]
Out[3]= 295.76954069704845551

数値計算演算子(NIntegrateNSumNDSolve等)のWorkingPrecisionオプションを設定すると,これらの演算子が任意精度を使うよう強制することができます.

無限精度演算

無限精度演算は,厳密な入力が既知であり厳密な出力が所望される場合や,代数的に式を操作する場合に使われます.

Rationalizeは浮動小数点数を厳密数に変換する便利な関数です.

組込みの数学関数に無限精度の入力を与えると,結果は無限精度の出力になります.以下がその例です.

In[1]:= Cos[Pi]
Out[1]= -1

In[2]:= Precision[%]
Out[2]= \[Infinity]

無限精度と機械精度の入力を組み合せると,機械精度の出力になります.

[English]

この項目は役に立ちましたか?
はい
いいえ

ご意見・ご提案がおありでしたらお書きください.

フィードバックをありがとうございました.

送信

サポートへのお問合せ

お支払い,アクティベーションに関する質問から技術的な質問まで,お気軽にお問い合せください.

販売代理店 (ライセンスをお持ちの方は、ご購入された代理店にお問い合わせください)

Hulinks

電話:03-5642-8380
Fax:03-5642-8381

soft.sales@hulinks.co.jp
Webサイト

日本電子計算株式会社

電話:03-5210-0184
Fax:03-5210-0229

math_info@cm.jip.co.jp
Webサイト

亘香通商株式会社

電話:045-320-2711
Fax:045-320-9342

sales@senko-corp.co.jp
Webサイト

株式会社シーエムディーラボ

電話:03-3408-8406
Fax:03-3408-8406

info@cmdlab.co.jp
Webサイト