Yes, you’d do a jump on overflow flag. The numbers by default would be 31 bit ints with a 1 bit tag. Pointers end with 0, so the least signicant digit being a 1 is a tag bit.
When you do any number operations you’d shift do the corresponding arithmetic and shift back and fill a 1. This is super cheap because it’s done in registers. Or if it’s a pointer obviously you’d do a more expensive operation (which is a good thing because it saves you at runtime, otherwise you’d crash).
You can’t really check at compile time if you’re going to overflow because you don’t know what your inputs are most of the time. But when you need a bignum and you overflow and your program crashes - that’s already on the user’s computer. It’s too late. Your shuttle already crashed.
Also, the benefit of fractional numbers is that they can represent currency correctly. Safeway just had a price advertised of three items for $5. When I bought exactly three items, I got charged $5.01. This is possibly false advertisement. It wasn’t that the unit price was $1.67, the ad clearly stated I get 3 items for $5
and who knows how many people implement things dealing with currencies in FLOATS… I think the default type should be a rational number that allows you to store $96.73 as 9673/1000 internally instead of a binary floating point number (again, if you want 96.73f you can have it)