C言語初心者です。
自分で作ったプログラムのソースはhttp://www1.axfc.net/uploader/He/so/375902.txtにあります。
(1)は一応解けたと思うのですが、(2)に関してはお手上げでした。
<問題>
π = 4*(π/4) = 4*arctan(1)
arctan(x) のテイラー展開を用いてπの値を正しく求めよ。(最低7桁まで)
(1)単精度・倍精度で誤差を比較せよ。
(2)単精度のみを用いて正しく求めよ。
(2)のやり方を教えてください。
(1)も上手くいったとは言い難いので、気づいた点があればご指摘願います。
No.2ベストアンサー
- 回答日時:
#1の続きです
級数の値を求めるとき、値の小さい項を先に足しこむほうが正確に求められます
プログラムを作って確かめてみました
#include <iostream>
#include <iomanip>
int main(void) {
int n=10000;
float p4a=0.0f;
for (int i=n-3; i>0; i-=4) p4a+=2.0f/i/(i+2);
float pa=4.0f*p4a;
std::cout << std::setprecision(20)<<pa<<"\n";
float p4b=0.0f;
for ( int i=n-1; i>0; i-=4 ) p4b+=2.0f/i/(i+2);
float pb=4.0f*(1.0f-p4b);
std::cout << std::setprecision(20)<<pb<<"\n";
float pc=(pa+pb)/2;
std::cout << std::setprecision(20)<<pc<<"\n";
}
結果
3.141392707824707
3.1417925357818604
3.1415925025939941
7桁目まで求められました
「Euler変換」が交代級数の値を求めるときの参考になるでしょう
(1)に引き続きのお礼欄です。
std::cout << std::setprecision(20)<<pa<<"\n";のみよくわかりませんでしたが、printfみたいなものですよね。
他はわかった気がしますが、見慣れない書き方もあって未熟さを実感しつつも勉強になりました。
足す順によって結果が変わること、ご回答のように今回の場合は平均をとることで精度が上がることも勉強になりました。精進いたします。
回答ホントにありがとうございました。
No.1
- 回答日時:
> (1)も上手くいったとは言い難いので、気づいた点があればご指摘願います。
xの値は1.0なので、
double f_double(void){
double z;
int n;
z = 0;
for(n=1;n<pow(10,7);n+=2){
if(n%4 == 1){
z = z + 1.0/n;
}
else{
z = z - 1.0/n;
}
}
return z;
}
にする。
> (2)のやり方を教えてください。
交代級数(項ごとに符号が変わる級数)をそのまま計算すると誤差が大きくなるので、たとえば、
a(n)=1.0/n-1.0/(n+2)=2.0/(n*(n+2))
を、(1):n=1から4おきに加えるか、
(2):n=3から4おきに加えたものを1.0から引くか、
あるいは、(3):(1)と(2)の平均値をとる
ことで精度を上げることができます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 数学 tan(z)をローラン展開して tan(z)=-1/(z-π/2)+(1/3)(z-π/2)+… と 14 2023/01/17 10:33
- 数学 「f(z)=1/(z^2-1)に関して ローラン展開を使う場合、マクローリン展開を使う場合、テイラー 3 2022/08/27 19:56
- 工学 f(z)=tan(z) の 0<|z-π/2|<π での ローラン展開 f(z)=Σ_{n=-∞~∞ 4 2022/07/11 03:53
- 英語 ソシュール言語観による品詞、単語、辞書理解の誤り 4 2022/11/24 12:27
- 物理学 真空中に電位差Vに帯電した辺の長さlの正方形 の極板がある。 極板間の距離をdとする. いま, 初速 1 2022/11/24 16:07
- 数学 多変数関数の微分とテイラー展開について 5 2022/04/24 16:55
- 数学 複素関数と実関数のテーラー展開の違いについて 1 2022/08/09 06:18
- 数学 【完全微分方程式⠀】 分数で分母が0になり定義できない場合、分母を仮にtと置いてそれを極限t→0とし 1 2022/05/06 14:43
- 数学 過去にしてきた質問に対する解答に関して質問が以下の1〜7に関して解答を頂きたく思います。 時間のある 34 2022/07/09 21:52
- 高校受験 数学の問題いくつか捨てても大丈夫?残り1ヶ月、点数が取れない教科ばっか勉強しても大丈夫? 高校受験 2 2023/01/07 17:55
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
switch文のエラーについて
-
セグメンテーションフォルトが...
-
ファイル読み込みとmap処理
-
構文エラーが出ているのですが...
-
リモートデスクトップの接続元I...
-
iostream インクルード時に発生...
-
C++で縦の棒グラフ
-
snprintfが使用できない。
-
VC++で文字列から任意の文字を...
-
std::map の const 修飾について
-
このプログラミング誰か教えて...
-
vectorの中にmap
-
std::wstringのメモリリークに...
-
ヘッダーファイルがインクルー...
-
string型のフォーマット書式指...
-
winpcapを用いたプログラミング
-
C++で大量のエラーが出る
-
コンパイルできません
-
C++ basic_ostreamの拡張
-
atlbase.h と afxwin.hの同時定義
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
構文エラーが出ているのですが...
-
VC++で文字列から任意の文字を...
-
enumの値から定義名を文字列化...
-
switch文のエラーについて
-
空ENTERの判別
-
なぜ、C++の標準ヘッダをインク...
-
【C++】ヘッダ内でstringを格納...
-
C++での <iostream.h>と<iostre...
-
#include "fstream.h"
-
#define中の#のエスケープ
-
JPEGやPNGが読めるLoadImage関数
-
リモートデスクトップの接続元I...
-
CStringとString
-
string型のフォーマット書式指...
-
std::map の const 修飾について
-
VHDLのsignedとunsignedの違いは?
-
このプログラミング誰か教えて...
-
構造体配列のvectorへの変換と...
-
指定した文字を削除したい
-
構造体に決められた文字列を入...
おすすめ情報