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