Mapleトップページ
サポート・マニュアル

厳密解と数値解

Maple では、有理数や整数で値を入力した場合は厳密な解を求める計算をし、値に小数点が含まれる場合は数値解(近似解)を求める計算をします。

> 1/3;

> 1/3.0;

0.3333333333

厳密解は誤差のない完璧な解を求めることを可能にします。

> sqrt(2)*sqrt(3);

> sqrt(2.0)*sqrt(3.0);

2.449489743

厳密解は誤差のない解を表しますが、計算結果を他のツールで入力する時はそのままでは使用することが出来ず、数値化(近似化)しなければならない場合があります。

そのような場合、evalf コマンドを使用します。

> ans := sqrt(2)*sqrt(3);

> evalf(ans);

2.449489743

Maple で数値計算を行う際、演算には倍精度演算を使用せず、独自のソフトウェアフローティングを使用します。従って、設定されている精度の範囲内では正確に計算ができます。

下のような何気ない計算ですが、お持ちの数値計算ソフトウェアで同じ解になるか試してみてください。

> 0.3 - 0.2 - 0.1;

0.

ソフトウェアによっては多少対処がされているものもありますが、多くの数値解析ソフトウェアは倍精度演算を使用する為、0以外の解を返します。

倍精度演算は値を 64bit 2 進数で計算します。0.3 等のほとんどの小数点数は 2 進数にすると無限に続き、長さが 64 bit 以下については切り捨てられます。その為倍精度演算は誤差が発生しやすくなっています。

Maple でも evalhf コマンドを使用することで倍精度演算ができます。

ここで、0.3, 0.2, 0.1 を確認すると、返される値には誤差が含まれていることが確認できます。

これが計算がおかしくなる原因です。

> a := evalhf(0.3);
b := evalhf(0.2);
c := evalhf(0.1);

a :=0.299999999999999988
b :=0.200000000000000010
c :=0.100000000000000004

> evalhf(a-b-c);

-2.77555756156289136 10-17



お問い合わせ サイバネットシステム株式会社 システムCAE事業部
TEL: 03-5297-3299 (受付時間 9:00〜12:00 / 13:00〜17:30 ※土日祝及び弊社休業日を除く)
メールでのお問い合わせ  お問い合わせフォーム  お問い合わせ一覧

モデルベース開発