给定一个浮点数,我希望得到一个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
甚至可以使用任意长的数字,这很好,因为我正在尝试转换具有数千个小数位的小数。我的算法的性能很糟糕。
我将此归因于两件事,但可能还有更多:
- 我获得分数的方法非常幼稚。我确信有更好的方法。
- 该分数是未简化的,因此使用该分数的任何后续计算都可能会浪费大量时间。
你会怎么做?还有其他我没有谈到的领域让我慢下来吗?