FYI, I did a few tests with real symmetric matrices, and your implementation matches the SVD-based method with very high accuracy.

Both methods are capable of diagonalizing outrageously hierarchical matrices. I tried diagonalizing a 5Ă—5 matrix with eigenvalues spanning 35 orders of magnitude, and both methods were accurate to within *only* 10^{35}\epsilon (using 1024 bit BigFloats, so \epsilon \sim 10^{-308}). The SVD-based method was slightly (10^3 times) more accurate, but in these extreme situations it does not really matter.

However, I am having issues diagonalizing matrices of `Complex{BigFloat}`

using your package. The following code:

```
julia> using LinearAlgebra, GenericLinearAlgebra
julia> m = Hermitian(rand(Complex{BigFloat}, 5, 5));
julia> eigen(m)
```

leads to a method ambiguity with LinearAlgebra:

```
ERROR: MethodError: LinearAlgebra.eigen(::Hermitian{Complex{BigFloat},Array{Complex{BigFloat},2}}) is ambiguous. Candidates:
eigen(A::Hermitian) in GenericLinearAlgebra at /home/jl/.julia/packages/GenericLinearAlgebra/s9cSL/src/eigenSelfAdjoint.jl:630
eigen(A::Union{Hermitian{T,S}, Hermitian{Complex{T},S}, Symmetric{T,S}} where S where T<:Real) in LinearAlgebra at /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.0/LinearAlgebra/src/symmetric.jl:490
Possible fix, define
eigen(::Union{Hermitian{T,S} where S<:(AbstractArray{#s549,2} where #s549<:T) where T<:Real, Hermitian{Complex{T},S} where S<:(AbstractArray{#s549,2} where #s549<:Complex{T}) where T<:Real})
Stacktrace:
[1] top-level scope at none:0
```

Am I doing something wrong or is this a bug?