掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
多倍長クラスのCLNについてなのですが (ID:67225)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
多数の投稿ありがとうございました。 ヤフーで質問もしたのですが、解答を得られず コメントを頂いたのですが、ある程度解決し、そのソースを載せようと思ったのですが、 二つも同じスレをたてるのも、どうかと思い削除してしまい 色々批判を受けて両方削除しました。 決して逃亡したわけでも、ムカついたから削除した等ではないのでご理解ください。 そこでCLNのソースなんですが、 #include <cln/cln.h> using namespace std; using namespace cln; int main() { float_format_t precision = float_format(100); int n = 0; //n次の値を出すためのn double xf = 10; //xをどこまで計算させるか double xia = 0.1; //x start2 // ● cl_F x = "0.1_60"; //x start // ● double delta = 1.0E-2; //x plus // ■ cl_F xd = "1.0E-2_60"; //x plus // ■ double xi; cl_F j[52],scale,sum; //k=50まで計算させる配列,scale cl_F Fk = "50.0_60"; //kと同期させるFk cl_F Fk2 = "50.0_60"; //Fkの初期化用 cl_F b = "1.0_60"; // 数値1 cl_F c = "2.0_60"; // 数値2 j[51] = j[50] = "1.0_60"; cout << "x" << '\t' << "y" << endl; for(xi=xia;xi<=xf;xi=xi+delta){ //xは0.1→40.0まで Fk = Fk2; // Fk=50で初期化している for(int k=50;k>0;k--){ // kは50→0.0まで計算 j[k-1] = (((c * Fk + b)/x) * j[k]) - j[k+1]; // 漸化式 Fk = Fk - b; // Fk と k を同期させている } scale = ((sin(x))/x)/j[0]; // j0=sinx/x sum = j[n]*scale; cout << x << '\t' << sum << endl; x = x + xd; } } このプログラムをすっきりさせる方法はありますでしょうか? Fkなど二つあるのは、CLNの数値は1.0など加算してしまうと 桁落ちが発生してしまうのを防ぐためにあります。 そこで質問なのですが、y→0 のxを求めたいのですが(xの零点) どのようにしたらいいのでしょうか? if(sum<xd && sum >0.0){cout << x << endl;} の文を考えてみたのですが、いまいちきれいな形とはいえないと思いますので・・・ 他に何か助言がありましたらお願いします。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.