draw_text() and string() rounds to 2 digits, if you use string_format() or look at the value from debug there are more digits than that.
Having a limited number of digits is a natural consequence of finite storage on a computer, live with it. This is not a symbolic algebra environment, most non-integer quotients have no exact representations here. You have to change your programming such that small errors like this don't matter, such as using a view to rotate the screen or drawing everything slightly bigger so that the gaps fill in themselves.
Also, I don't think you have a clue what "irrational" means if you think 16/90 is it. Irrational means "cannot be written as a fraction", but you just wrote it out as a fraction.