浮動小数点数が与えられた場合、私はString
小数に近い有理数の表現を取得しようとしています(与えられた許容範囲内でεは問題ありません)。私の現在のアプローチは次のとおりです。
String rationalize(double d)
{
String s = Double.toString(d);
s = s.substring(s.indexOf('.')+1, s.length());
return s + " / " + ApintMath.pow(new Apint(10), s.length()).toString();
}
慣れていない場合はApintMath.pow
、任意の長さの数値でも機能します。これは、小数点以下数千桁の小数を変換しようとしているためです。私のアルゴリズムのパフォーマンスはひどいです。
私はこれを2つのことに起因しますが、それ以上の可能性があります。
- 分数を取得するための私のアプローチはかなり素朴です。もっと良い方法があると確信しています。
- 分数は単純化されていないため、この分数を使用した後続の計算では、多くの時間が無駄になる可能性があります。
これをどのように行いますか?私が話していない他の分野で私を遅くしているものはありますか?