Agrupar termos semelhantes em polinomios

Olá, estou fazendo um trabalho e gostaria de saber como eu posso agrupar termos semelhantes em um polinômio para que eu consiga imprimí-lo de uma forma mais sucinta. O polinômio é o seguinte:

16.39999999999999857892+(x-(2.0))(-1.19999999999999928946)+(x-(2.0))(x-(3.0))(0.45000000000000017764)+(x-(2.0))(x-(3.0))(x-(4.0))(0.08333333333333303728)+(x-(2.0))(x-(3.0))(x-(4.0))(x-(5.0))(-0.01353535353535350109)+(x-(2.0))(x-(3.0))(x-(4.0))(x-(5.0))(x-(13.0))(0.00218013468013467669)+(x-(2.0))(x-(3.0))(x-(4.0))(x-(5.0))(x-(13.0))(x-(14.0))(-0.00039497539497539462)+(x-(2.0))(x-(3.0))(x-(4.0))(x-(5.0))(x-(13.0))(x-(14.0))(x-(15.0))(-0.00002511377511377518)+(x-(2.0))(x-(3.0))(x-(4.0))(x-(5.0))(x-(13.0))(x-(14.0))(x-(15.0))(x-(16.0))(0.00005539213872547207)

Existe alguma biblioteca que faça isso?

Resolva o problema em Kawa (Scheme Lisp implementado em Java).

Um exemplo de resolução do seu problema em Lisp: