Cで10進数を有理数近似する方法を知っていますか(ラットMatlab関数と同様)?
アップデート
倍数のP/Q近似が必要な場合、簡単な修正は次のようになります。
int factor=1000000;
P=floor(number*factor);
Q=factor;
エラーは(数値/係数)未満であり、無視できます。
Cで10進数を有理数近似する方法を知っていますか(ラットMatlab関数と同様)?
アップデート
倍数のP/Q近似が必要な場合、簡単な修正は次のようになります。
int factor=1000000;
P=floor(number*factor);
Q=factor;
エラーは(数値/係数)未満であり、無視できます。
連分数は、ある意味で最適な実数の有理数近似を計算するために使用できます。そうすれば、入力0.33333333を使用して、3333/1000ではなく1/3を取得する可能性があります。
アップデートで行ったのと同じことを行うことができますが、次に上部と下部の間の最大公約数をチェックして単純化します。たとえば、あなたの方法でそれ0.5
を500000/1000000
行うことになります。それらはの共通因子を共有している500000
ので、上と下の両方をそれで割ってを得ることができます1/2
。Googleには、このようなhcf関数の例がたくさんあります(編集:そしてこの印象的なリスト)。