Учитывая число с плавающей запятой, я ищу, чтобы получить 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
будет работать даже с произвольно длинными числами, что хорошо, потому что я пытаюськонвертировать десятичные дроби с тысячами десятичных знаков.Производительность моего алгоритма ужасна.
Я приписываю это двум вещам, но их может быть больше:
- Мой подход к получению дроби довольно наивен.Я уверен, что есть лучший способ.
- Фракция не упрощена, поэтому любые последующие вычисления с использованием этой фракции, вероятно, будут тратить много времени.
Как бы вы это сделали?Есть ли другие области, о которых я не говорил, которые меня тормозят?