この質問に至った経緯から説明します。
√3を小数計算をするプログラムを作りました。
C++
1double x = 1; 2 3for (int i = 1; i <= N; i++) { 4 x = ((x*x + a) / (2 * x)); 5 printf("%d : %02.100lf\n", i, x); 6 }
省略していますが、√3 なので、a = 3になっています。
ニュートン法を使って漸化式を作りました。
結果は以下のようになりました。
calc root : 3 1 : 2.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000 2 : 1.75000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000 3 : 1.73214285714285720629845855000894516706466674804687500000000000000000000000000000000000000 00000000000 4 : 1.73205081001472738222446423606015741825103759765625000000000000000000000000000000000000000 00000000000 5 : 1.73205080756887719317660412343684583902359008789062500000000000000000000000000000000000000 00000000000 6 : 1.73205080756887741522120904846815392374992370605468750000000000000000000000000000000000000 00000000000 7 : 1.73205080756887719317660412343684583902359008789062500000000000000000000000000000000000000 00000000000 8 : 1.73205080756887741522120904846815392374992370605468750000000000000000000000000000000000000 00000000000 9 : 1.73205080756887719317660412343684583902359008789062500000000000000000000000000000000000000 00000000000 10 : 1.7320508075688774152212090484681539237499237060546875000000000000000000000000000000000000 000000000000 11 : 1.7320508075688771931766041234368458390235900878906250000000000000000000000000000000000000 000000000000 12 : 1.7320508075688774152212090484681539237499237060546875000000000000000000000000000000000000 000000000000 13 : 1.7320508075688771931766041234368458390235900878906250000000000000000000000000000000000000 000000000000 ・・・
結果が繰り返されているので、
「doubleの型に収まる桁の限界がきているのかな??」
と思っているのですが、以下のサイトを見つけました。(わかりやすいです。)
浮動小数点数型と誤差
2.225074 10^-308 < double の絶対値 < 1.797693 10^+308
こうなっていたので、「あれ?? 全然大丈夫そうだけど・・・」
なんで、こんなに小さい桁数で結果が繰り返されているのか不明なのですが・・・
#ここでdoubleよりもっと大きい桁を扱える変数を自作する方法を教えて下さい。
以前、以下のような質問をしました。
int型の先頭アドレスについてです。
char型を複数使うことでint型を作り出しているなら、それと同じ原理でオリジナル変数をつくればもっと結果の繰り返しを遅らせることができるのではないかと思っています。
ちなみに、long double を使ってみましたが、結果は同じでした。
ちょっと説明しにくいのですが、
より大きな桁を扱うための変数の作り方を教えてほしいです。
お願いします。
環境は windows 64bit, 64bitコンパイルをしました。
[追記]
Chironianさんの回答を元に面白いサイトを発見しましたので、載せておきますね。
多倍長演算

回答6件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/03/02 10:13
2017/03/02 10:15
2017/03/02 11:57
2017/03/03 03:29
2017/03/03 04:36
2017/03/03 06:08
2017/03/03 09:08
2017/03/03 09:31
2017/03/03 09:47
2017/03/03 11:45 編集