【发布时间】:2012-04-02 16:59:11
【问题描述】:
给定一个浮点数,我希望得到一个近似小数的有理数的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 甚至可以处理任意长的数字,这很好,因为我正在尝试转换具有数千个小数位的小数。我的算法的性能很糟糕。
我将此归因于两件事,但可能还有更多:
- 我获取分数的方法非常幼稚。我确信有更好的方法。
- 分数未简化,因此使用该分数进行的任何后续计算都可能会浪费大量时间。
你会怎么做?是否还有其他我没有谈到的领域让我放慢了脚步?
【问题讨论】:
标签: java floating-point rational-numbers