Note that I first meet computable numbers in Haskell : https://wiki.haskell.org/Applications_and_libraries/Mathemat...
I’ve used this package to get exact real computations in Haskell which get evaluated at n bits when needed for printing or equality checking etc.
Sometimes it’s unavoidable though, such as when checking equality where you have to call it quits at some point at some precision.
This is quite inefficient for things like summing over a list. Or really, any kind of accumulation.
Edit: looking into it was just reading futher on wikipedia. Even ordering is undecidable.
In general this works well.
[EDITED to add:] I checked; the implementation here indeed won't recognize that you're dividing something by itself. For the avoidance of doubt, nor do I think trying to recognize such things would be an improvement.
(Also, if you ask for e.g. the digit immediately preceding the decimal point, you will wait for ever because no amount of precision will enable the implementation to tell whether your number is just less than 1 or 1 or just over. So don't ask it for that, ask it for a very close approximation and draw your own conclusions.)
Even if you have computer algebra, math says it's not possible to check that arbitrary expressions are equal. It's an undecidable problem. So with that, I don't fault a computable reals package not being able to detect that x == y in an expression x/y.
(And I wonder idly from time to time about making one that does know a bit about some particularly nice classes of number -- e.g., algebraic numbers -- and does all the things you'd like it to as long as you stay within such a class. Obviously as soon as you ask it for sqrt(2)+pi all that would go out the window.)
If 0/0 = Q, then
0 = 0 × Q. So, we get to define this operation. If we treat 0 as an integer, then we could treat Q (a set) like a 1 x inf. matrix and we have scalar multiplication.
But
0 × Q = [0]' × Q
So 0 can be an infinite set of 0. This is cyclical, I know. This cyclical nature leads to an interesting effect if we also define integer division. Try this around 0 in Q.
We could also define the × as an inner (dot) product, or as a cross product.
This is fun!
This all directly falls out of a mathematical formalism called “computable real numbers” [1] which are the (countable!) set of real numbers for which an algorithm exists to compute the digits to any desired precision. (Usually binary digits are the standard way to write out the definition of a computable number.)
[0] https://github.com/stylewarning/computable-reals
[1] https://en.m.wikipedia.org/wiki/Computable_number