ENGLISH page is here.
GET DinopSearchBar
サイト内検索:
HOME
VC++ TIPS
ダウンロード
DinopExifReader
DinopSearchBar
DinopSearchBar mini
DinopTabbingBar
for Firefox
大阪湾の生き物
甲子園浜の自然
甲子園浜の干潟
甲子園浜の水中
甲子園浜の野鳥
近畿の山々
植物図鑑
箕面マップ
水中機材
カメラ
ランキング
望遠鏡の世界
顕微鏡の世界
Googleのすべて
GoogleマップAPI
ニュース
読んだ本
日記
変な料理の作り方
遺伝子操作
論文紹介
デイトレード
自動売買でFX
ネットで小遣い稼ぎ
Solaris
電子工作
その他
問い合わせ
VC++用コード集
大阪湾の生き物
水中用機材
since:2000/11/15
dinopcom@gmail.com
www.dinop.comは
だいのっぷ・どっと・こむ
と読んでください。







« マウスを砂時計に変更 | メイン | クイックソート関数の改良 »

ニュートン法による逆数の計算




【 逆数とは 】

 1~9までの整数の逆数について調べてみると...
 1の逆数は 1/1 = 1
 2の逆数は 1/2 = 0.5
 4の逆数は 1/4 = 0.25
 5の逆数は 1/5 = 0.2
 8の逆数は 1/8 = 0.125
これらの数値はその逆数も有限少数として求めることができる。しかし
 3の逆数は 1/3 = 0.333333...
 6の逆数は 1/6 = 0.166666...
 7の逆数は 1/7 = 0.142857...
 9の逆数は 1/9 = 0.111111...
これらは無限小数となるため求めることができない。

 ここでは任意の数値 a に対する逆数 1/a を高精度※1で求める。

 ※1 ここで言う「高精度」とは小数点以下15桁以上のことを指す。15桁程度を
  求めたければ...普通に変数をdoubleで定義して 1/a を計算すればいい。
  またWindows付属の電卓でもその程度は求められる


【 目的 】

 そもそも逆数を計算してどうするのか?

 ある任意の数値 a と b があるとき、 b * a という乗算と b / a という除算では、 乗算の方が計算量が少ない※2

 そのため b / a = b * (1/a) とし、「 b に対し a の逆数を乗算する」とする。こ こで使うための逆数を求める※3のが目的だ。


 ※2 どっちも1回じゃないか!乗算と除算って違いはあるけど、なんて突っ込みは禁止
 ※3 逆数を求めるための計算量が増えてんじゃん、ってのもなしね


【 漸化式の取得 】

 ニュートン法に適用するための方程式 f(x) とその1次導関数 f'(x) を求める。
 このとき、f(x) = 0 の解がaの逆数 1/a になるようにする。また無限に微分できるこ とが好ましい。


 次に上の方程式に対するニュートン法の漸化式を求める。

 これで逆数 1/a を求めるための漸化式として xn+1 = xn(2 - a * xn) が求まった。


【 初期値と収束条件 】

 ここで漸化式の初期値 x0 は求める逆数 1/a に近い値であればあるほど 収束が速いそのため漸化式の初期値は
          x0 = (double) 1/a ※4
とする。

 また求めた数値が収束したかどうかは 2 - a * xn の項がどれだけ1.00に 近づいたかを見ることで判定する。

 ※4 ここでの 1/a はdouble型の変数を使うため有効桁数16桁程度


【 計算例 】

 ここでは 123456789 の逆数 1/123456789 を計算してみた。
 有効桁数 (1800-9) 桁を 7 回のループで求めることができた。
 求めた数値の検算は同様の方法で求めた2500桁までの数値に対し 12345679 を乗算することで行い、誤差部分は赤く示した。

初期値:
0.000000008100000073710001300

1回目:
0.000000008100000073710000670761006103925106664026590000

2回目:
0.000000008100000073710000670761006103925155545718915466042130740983389742653856559247121258551761229100000000

3回目:
0.0000000081000000737100006707610061039251555457189154660421307409833897429488466608345046135939919837053270517184761706381331528070116905
33063277869297304365939249417034960140894927399673682220404746910000000

4回目:
0.0000000081000000737100006707610061039251555457189154660421307409833897429488466608345046135939919837053270517184761706381331528070116905
43806383948638093932606654786720558559157082888329454283798033982562109241315194095968266273311223087132130092902383845411692993232157556
174185826998993612371281756292720486968179344424947852272492244479407878399986975061066005930572402184167032286582040258827949100000


5回目:
0.0000000081000000737100006707610061039251555457189154660421307409833897429488466608345046135939919837053270517184761706381331528070116905
438063839486380939326066547867205585591570828883294542837980339825621092413151940959682662733112230871321300929023838454116929932464062385
422967707349006136875955845571198194697903571750922502933394776693892467914421458021235267993240938738492542520282136934567446104563759551
530211918924928462216849006173325956177266201213122431039414122458668514373883480802339675301291045241748511699660808386009329606009987014
143478809074187844714000491183416435881061299444977925164630313578509934408348200114824921218210099155333722308122477914827991571636880115
51285208307607815850317627963377701121233501237228895360046553758183966026431320875626530303637583697510042090910


6回目:
0.0000000081000000737100006707610061039251555457189154660421307409833897429488466608345046135939919837053270517184761706381331528070116905
438063839486380939326066547867205585591570828883294542837980339825621092413151940959682662733112230871321300929023838454116929932464062385
422967707349006136875955845571198194697903571750922502933394776693892467914421458021235267993240938738492542520282136934567446104563759551
530211918924928462216849006173325956177266201213122431039414122458668514373883480802339675301291045241748511699911456469194253869667710213
976162947183082819366053656231088271702903272496419779717419995428521958399549821435903375066720713107158489275142252403794496874529921558
222286179822804236387518551126418815250411218778742090886553027067632546315456171470651160382925559484622591310065580921596786386530756117
429880668611914084368418167752605326548708471593247091498548532636791646994803987652716287639718217521435779445065592950096895845881752197
523944997467899476957885240316755686882476750630538430737899719714887449404700178959797906096990028925667496102833354906178189432783902205
458137138883843917510794160533364055622731458999944493917872808881682519493387663990827197582189260053323386937274760415631189890665408423
750506435541324302977816087218314849415674535225152615161821232559459292564838862789023857365598306864073718337837000122148735181428882485
101783605704934933164770041641837883507037930482822634779656823885495068410045629597415916071562544642489832826747471894891075403121233248
57347506532060449083781084559976209045363087872855652010485806539160453707961334829100


7回目:
0.0000000081000000737100006707610061039251555457189154660421307409833897429488466608345046135939919837053270517184761706381331528070116905
438063839486380939326066547867205585591570828883294542837980339825621092413151940959682662733112230871321300929023838454116929932464062385
422967707349006136875955845571198194697903571750922502933394776693892467914421458021235267993240938738492542520282136934567446104563759551
530211918924928462216849006173325956177266201213122431039414122458668514373883480802339675301291045241748511699911456469194253869667710213
976162947183082819366053656231088271702903272496419779717419995428521958399549821435903375066720713107158489275142252403794496874529921558
222286179822804236387518551126418815250411218778742090886553027067632546315456171470651160382925559484622591310065580921596786386530756117
429880668611914084368418167752605326548708471593247091498548532636791646994803987652716287639718217521435779445065592950096895845881752197
523944997467899476957885240316755686882476750630538430737899719714887449405475789589829685267450135933796236997545756677666385766764110477
553405345735988646197496680397219791614700103693770943613315586881171840618663749629840121631545106847060472308250298005077711846207177800
485317984416393658189182289521558834646185395280287097050612583160574506761228011527174904897291634565353874544720258356954351048284594539
389810308447273806870191642518743946920569916977186244492394824880792906415215448378460580243991280220320650004917915044753026907252544855
998158189583239525207479679388065082431392250125669476143592232906689319450872807002942543726777147913672046014415618731182130453757387129
192222875649228168407976332512584625864520095367132867840909097352272785905682351741709400849555547730955484351694907600423659163855298391
08321535


【 さらなる収束のために 】

 この方法は2次収束をする。
 3次、4次と高次に収束する方法については...そのうちできるかなぁ。









Copyright (c) 1999-2007 issei. All rights reserved. (運営者情報