And*_*man 6 java floating-point rational-numbers
给定一个浮点数,我希望得到一个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();
}
Run Code Online (Sandbox Code Playgroud)
如果你不熟悉它,ApintMath.pow
即使使用任意长数也会工作,这很好,因为我试图转换小数位数千位的小数.我的算法的性能很糟糕.
我将此归结为两件事,但可能会有更多:
你会怎么做?还有其他我没有谈过的领域让我感到沮丧吗?
此处显示了Stern\xe2\x80\x93Brocot 树实现,但您必须进行分析才能了解哪个更好。
\n\n附录:我org.jscience.mathematics.number.Rational
在线性系统中使用得到了很好的结果;org.apache.commons.math.fraction.BigFraction
提供了几个double
可能有用的构造函数。所有这些都会针对未定义的值抛出合适的异常。