Implemented correct three-way exactness flags

Exactness actually has three states:

 - default: int's are exact, floats are inexact

 - exact: both are exact

 - inexact: both are inexact

I also added some tests