• 検索結果がありません。

「倍精度浮動小数点数」のとき,δ= 2−53

N/A
N/A
Protected

Academic year: 2021

シェア "「倍精度浮動小数点数」のとき,δ= 2−53"

Copied!
3
0
0

読み込み中.... (全文を見る)

全文

(1)

2004年度・数理解析・計算機数学2・第3回 1

● 前回の講義のまとめ

数値を浮動小数点数として格納する場合や, 浮動小数点数の演算には, 一般に誤差がありうる. その 誤差は浮動小数点数の「体系」によって定まり,一般には以下の評価式が成り立つ.

実際の数値x∈Rを浮動小数点数として格納した値x

|x−x| ≤δ|x|

が成り立つ.

浮動小数点数の四則演算(の一つ)を ·であらわすとき, 浮動小数点数x,y の演算結果 xy と真の値x·y の間には

|(x·y)−(xy)| ≤δ|x·y|

が成り立つ.

いずれの場合も,「誤差」は真の値との相対誤差として評価される. (この「誤差評価式」が成り立 つためには,「減算」に関しては「1桁の保護桁」が必要となる.

上記の最大相対誤差δは, IEEE 784浮動小数点数の体系では,その「丸めモード」が「四捨五入」の 時には次の値を持つ.

「単精度浮動小数点数」のとき,δ= 2−24, 「倍精度浮動小数点数」のとき,δ= 2−53.

数列 an = (1 + 1/n)n に対して, e = limn→∞an の値を求めるために, 十分大きな n に対して

(1 + 1/n)n を浮動小数点計算を用いて計算しようと考ると,最終的に以下の結果を得た.

(1 + 1/n)n−e∼e

1

2n−1+

+O(n−2) +O(δ2).

したがって,期待できる計算精度は,n∼(1/

2δ)のとき,

|(1 + 1/n)n−e| ≤e

δ/2≤3 δ/2 程度となる.

● 講義資料

【ニュートン法を用いて x22 = 0 の解を求めたときの誤差のグラフ】

1e-12 1e-10 1e-08 1e-06 0.0001 0.01 1

0 0.5 1 1.5 2 2.5 3 3.5 4

"newton_sqrt2.txt"

ex03.tex,v 1.10 2004-10-17 17:33:37+09 naito Exp naito

(2)

2 2004年度・数理解析・計算機数学2・第3回

【関数へのポインタ】 C言語では,変数を指し示すポインタを用いるのと同様に, 関数さえもポインタで 指し示すことができる.

/* $Id: ex03-1.c,v 1.2 2004-10-18 11:57:49+09 naito Exp $ */

#include <stdio.h>

double newton_sqrt_2(double) ;

int main(int argc, char **argv) {

int i ;

double x0, x1, d ;

double (*approx)(double) ;

approx = newton_sqrt_2 ; x0 = 2.0 ;

for(i=0;i<10;i++) { x1 = approx(x0) ; x0 = x1 ;

printf("%.16f\n",x1) ; }

return 0 ; }

double newton_sqrt_2(double x) {

return x/2.0 + 1.0/x ; }

このプログラムは

2を求めるために,「逐次近似」として「ニュートン法」を用いて10回の繰り 返しを行うものであるが, 「逐次近似」を行う関数を“approx”というdouble 型の戻り値を持ち, double型の引数をただひとつだけもつ関数へのポインタを利用している. (main関数内の double (*approx)(double)でそのポインタを定義している.)代入文“approx = newton_sqrt_2”によっ て,そのポインタに, 関数“newton_sqrt_2”を代入している.

この例では,逐次近似の関数を用意し,関数へのポインタにその関数を代入するだけで,異った「逐次 近似」に変更することができる.

● 実習内容

以下では, 近似値の計算において, n 回目の計算で得られた近似値を xn, 真の値を x, その誤差を εn=|xn−x|とおく.

1. 「区間分割法」を用いて

2の値を絶対誤差10−6で求めなさい.

2. 「区間分割法」を用いて x32 = 0の解の値を絶対誤差10−6で求めなさい.

ex03.tex,v 1.10 2004-10-17 17:33:37+09 naito Exp naito

(3)

2004年度・数理解析・計算機数学2・第3回 3 3. 「ニュートン法」を用いて

2の値を相対誤差10−7で求めなさい. そのとき得られた値と 2の真 の値との絶対誤差はどの程度となるかを評価しなさい.

4. 「ニュートン法」を用いて

2の値を求めるとき,εn をグラフであらわしなさい. (上記のグラフを 参照)

5. k= 2,3, . . .に対して,「ニュートン法」をf(x) = (x1)k に対して適用し, f(x) = 0 の解の近似 値を求めるとき,εn をグラフであらわしなさい. また,上の問題とこの問題で得られたグラフをみて, どのような知見が得られるかを議論しなさい.

6. 逐次近似xn+1 =f(xn) f(x) = (2x)1/3, f(x) = (2/x)1/2, f(x) =x4/2 に対して適用し, 収束す る場合にはεn をグラフであらわしなさい.

7. 「ニュートン法」を用いて, 浮動小数点数xの逆数1/x(の近似値)を除算なしで求める方法を考 察しなさい.

8. 複素関数 f(z) =z2+ 1,f(z) =z3+ 1に対して「ニュートン法」を適用し,f(z) = 0の解を求めな さい.

9. f(x) = 0の解がm重根(m2)であるような関数に「ニュートン法」を適用したとき,εn

εn+1 m m−1εn

をみたすことを証明しなさい.

10. 「ニュートン法」でf を計算するところを「微分商」に置き換えたものを割線法と呼ぶ. すなわち, xn+1=xn−f(xn) xn−xn−1

f(xn)−f(xn−1)

によって f(x) = 0の解を求める.

f がニュートン法での近似計算が収束するときと同じ条件をみたすときには,割線法による近似計算 も収束することを証明し, その誤差は, あるL >0が存在して,

εn+1≤Lεnεn−1, εn+1≤εpn, p= 1 + 5 2 をみたすことを証明しなさい.

11. 電子メールで「今日の講義の感想や意見」を送ってください.

ex03.tex,v 1.10 2004-10-17 17:33:37+09 naito Exp naito

参照

関連したドキュメント

1 プログラムをホスト PC から外部メモリに転送する。 2 データをホスト PC から外部メモリに転送する。 3 プログラムの実行を開始する。

32b で表現可能な自然数の範囲を求めよ。また

数値計算における誤差解析

• Moler の手法 Moler [3] が提案した浮動小数点数一様乱数生成器. • Thoma の手法 Thoma [2]

GFDワークノート 実数の浮動小数点表現とその誤差 その1 1 実数の浮動小数点表現とその誤差 その 1 実際,我々は計算機を用いて関数fx, yを計算し,興味のある値zを獲得する.よっ て,∆cにはfx, yの計算の過程で生じた「計算誤差」が含まれている.. 今日,計算 機の性能が向上したからといって,この計算誤差が無視できるほどに小さくできる

関数 f2 の仮引数 xp (ポインタ変数)に渡されたポインタの違いに注目 f2 からは、 main 関数のブロック内だけで有効な変数 a

高階関数 (higher-order functions)

ブールパネルの設定・転送とログ出力 フロントパネル右上のブールパネルはブールボタン(ビットが持つ意味により色分けされた 64 個: ボタン上の数字はLSBを0とするビット位置)または16進数字メニューリング(8×2の2D配列:上 が上位、横2個で1バイト)で内部表現を1ビットまたは4ビット単位で指定するもので、転送指定の