PolynomialRoots.jl is a registered Julia package, so you can install it with the package manager:
Pkg.add("PolynomialRoots")
roots(polynomial[, roots, polish=true])
roots5(polynomial[, roots])
This new version of PolynomialRoots.jl features support for arbitrary precision calculations. This is very useful for calculating roots of polynomials of very large degree (some hundreds) that couldn't be solved using double precision calculations. Actually, this cures inaccurate results also for low order polynomials, like second-order ones, where catastrophic cancellation is a problem. For example, the actual roots of (see https://en.wikipedia.org/wiki/Loss_of_significance)
94906265.625*x^2 - 189812534*x + 94906268.375
julia> r = roots([94906268.375, -189812534, 94906265.625]);
julia> r[1]
1.0000000144879793 - 0.0im
julia> r[2]
1.0000000144879788 + 0.0imjulia> r = roots([BigFloat(94906268.375), BigFloat(-189812534), BigFloat(94906265.625)]);
julia> Complex128(r[1])
1.0000000289759583 - 0.0im
julia> Complex128(r[2])
1.0 + 0.0im
This package is licensed under Apache License 2.0 or GNU Lesser General Public License version 3 or any later version, as well as under a "customary scientific license", which implies that if this code was important in the scientific process or for the results of your scientific work, you are asked for the appropriate citation of the paper Skowron & Gould 2012 (http://arxiv.org/abs/1203.1034).
The authors release the source codes associated with the Paper under terms of the GNU Lesser General Public License version 2 or any later version, or under the Apache License, Version 2.0 as well as under a "customary scientific license", which implies that if this code was important in the scientific process or for the results of your scientific work, we ask for the appropriate citation of the Paper (Skowron & Gould 2012).
In order to make PolynomialRoots.jl as widely usable as possible in Julia environment, does it make sense to preserve this dual license for the package or it's better to choose one of them in order to avoid confusion?