Floating points have limited precision.
Double has about 17 significant positions but you specify over 20.
If you really need such precisions, you need a library that emulates higher order precision types than implemented in hardware. This will of course be a lot slower.
GMP is a library that offers such emulated floating point type, and the headers of that library come with FPC.
I would seriously consider using 20+ digits though, there are quite few real world applications for such precisions.