Thanks for your bug reports. These behaviours are by design. When you try to make $calc() perform operations that result in an error, such as divide by zero or an overflow, it returns zero and allows the script to continue running.
When it comes to large calculations, most programming languages are limited in the size of the values that they can calculate, depending on the
data types they are using for the calculation. mIRC supports a double value for floating point calculations. In order to support
arbitrary precision floating point calculations, mIRC would need to use an external library. Such a library would be far slower than normal calculations and would only be usable in specific situations, such as within $calc(), and nowhere else in mIRC.