Just a little anecdotal evidence for the futility of error checking, compile and runtime, no matter how sophisticated.
I initialized something to 1e64 instead of 1f64. It somewhat affected the results. By 64 orders of magnitude!
The Rust compiler, always so full of complaints at other times, was of course happy with it.
As were all my runtime checks. How often do you test for legal values being 'just too big'?
It shows how all error checking, compilation and runtime, is doomed in the face of the slightest typing error.