This is great and reminds me of an issue we ran into developing the numerical engine in circuit simulation software; user-specified values spanning many orders of magnitude mean you're likely to run into issues like this. In our case the answer was to go to 128-bit floating point operations inside our sparse matrix solvers, which we published here: https://www.edn.com/design/analog/4418707/1/Extended-precisi...