Biblioteka do kalkulatora

1

Witam

Piszę dość specyficzny kalkulator - nie będę się tutaj rozpisywał nad jego funkcjonalnością. Ważne jest, że precyzja to podstawa: w działaniach liczy się n-te miejsce po przecinku a taką liczbę będe musiał jeszcze pierwiastkować itp.
Jest klasa BigDecimal i teraz pytanie czy ona mi to zapewni?
Jest metoda devide i mniemam, że będzie ok ale pierwiastek?
Konwersja do double to nieporozumienie.
Znalazłem takie coś:

 
public static BigDecimal sqrt(BigDecimal n, int s) {
    BigDecimal TWO = BigDecimal.valueOf(2);

    // Obtain the first approximation
    BigDecimal x = n
        .divide(BigDecimal.valueOf(3), s, BigDecimal.ROUND_DOWN);
    BigDecimal lastX = BigDecimal.valueOf(0);

    // Proceed through 50 iterations
    for (int i = 0; i < 50; i++) {
      x = n.add(x.multiply(x)).divide(x.multiply(TWO), s,
          BigDecimal.ROUND_DOWN);
      if (x.compareTo(lastX) == 0)
        break;
      lastX = x;
    }
    return x;
  }

Co myślicie? Dodam, że jeszcze też muszę logarytmowac takie niewdzięczne liczby - jakieś pomysły czy zostaje mi tylko implementacja samemu jakiegoś algorytmu numerycznego.

Inne pytanie - kiedys na tym forum była opisana biblioteka, która obsługiwała sama kolejnosc zadan arytmetycznych - również nawiasy itp. rzeczy. Pamięta ktoś?

Za wszelkie podpowiedzi będe naprawdę wdzięczny!

1

Uderz do CERN > http://acs.lbl.gov/software/colt/

Z colta trochę korzystałem na studiach i był całkiem fajny. Tam zresztą jest więcej tego typu softu.

0

Znalazłem kilka prostych i fajnych parserów, ale najbardziej mnie zaciekawił bardziej skomplikowanuy ANTLR. Można robić na nim grafy - działania są rozpisywane na poziomu i pomyśałem że dzięki temu można by zrobić wielowątkowe przetwarzanie działań.

Znalazłem fajny link opisujący gramatykę dla operatorów:
http://www.mymindleaks.com/article/writing-expression-parser-using-antlr.html

Tylko zastanawiam się jak zrobić funkcje : ln, cos itp (są jednoelementowe).
Próbował ktoś to ugryźć?

1 użytkowników online, w tym zalogowanych: 0, gości: 1