C# で連分数を求めるコード

予算
3千
5千
納品希望日
ご相談
募集期限
募集終了 締切日 2022年1月3日 /
掲載日 2021年12月31日
応募状況
応募人数 2
契約人数 1
閲覧数 73
用途・種類
その他
対応範囲
用意してあるもの
開発言語
C#

募集内容

依頼の概要・目的・背景
 以下の C のコードをもとに C# で static な連分数クラスを作成していただけないでしょうか?  単に移植するだけなら簡単なのですが、クラスを含むオブジェクト指向的プログラミングの理解がイマイチなので、その知識を深めるためです。  たとえば   long a = 1;   long b = 1;   MyMath.ApproxFrac(ref a, ref b, 3.14159265358979) とすると   a = 355   b = 113 となるような感じ。 //実数の近似分数を求める #include <stdio.h> #include <math.h> #define ZERO 1e-02 // 許容誤差 #define MAX_CALC 15 // 近似分数の最大計算回数   long gcd(unsigned long a, unsigned long b) //最大公約数   {     long r;     while (b != 0)     {       r = a % b;       a = b;       b = r;     }     return a;   }   typedef struct // 分数(p/q)   {     unsigned long p, q;   } Frac;   Frac regfrac(Frac frac)// 既約分数   {     Frac ret = frac;     long g = gcd(ret.p, ret.q);     ret.p /= g;     ret.q /= g;     return ret;   }   // 分母分子の値から分数を生成   Frac NewFrac(unsigned long p, unsigned long q)   {     Frac ret;     ret.p = p;     ret.q = q;     ret = regfrac(ret);     return ret;   }   Frac AddFrac(Frac frac1, Frac frac2)// 分数の足し算   {     return NewFrac(frac1.p * frac2.q + frac1.q * frac2.p, frac1.q * frac2.q);   }   void showfrac(Frac frac)// 分数の表示   {     printf("%u / %u\n", frac.p, frac.q);   }   Frac ReverseFrac(Frac frac)// 逆数   {     return NewFrac(frac.q, frac.p);   }   Frac ApproxFrac(double x) // 連分数を求める:非再帰版   {     int level = 0;     unsigned long seq[MAX_CALC];     while (1)     {       seq[level++] = (long)x;       if (fabs(x - (long)x) < ZERO || level == MAX_CALC)         break;       x = 1.0 / (x - (long)x);     }     // 普通の分数にする     Frac fr = NewFrac(seq[level - 1], 1);     for (int i = level - 2; i >= 0; i--)       fr = AddFrac(NewFrac(seq[i], 1), ReverseFrac(fr));     return fr;   } int main() {   showfrac( ApproxFrac(3.14159265358979) ); }
添付ファイル
参考URL
求めるスキル
特記事項

応募者一覧

応募者
応募日時
nnnb
2021/12/31 13:45
tatsuro0120
2021/12/31 13:54

募集内容についての質問

質問と回答の履歴

質問はまだありません。不明なことがあれば質問してみましょう。
募集終了
ブックマーク
予算
3千
5千
募集終了

募集者情報

アンドロメダシティ
アンドロメダシティ
5.0 (2)
2
発注件数
100%
発注率
100%
取引完了率
認証状況
本人確認
機密保持契約(NDA)

この募集内容に似ている仕事

予算
3万
5万
応募者数 102
募集期限 あと 4 日 (9月28日まで)
user
mitsujiro
投稿日時:2日前
予算
見積り希望
応募者数 55
募集期限 あと 10 日 (10月4日まで)
user
Mauna0227
投稿日時:3日前