This function takes a float then spits out the two integers for the decimal value. At least that was the intention
let flr (x:float) = float(int(x))
let f x =
 let r y = let x = x * y in x = flr(x)
 let rec f y =
  if r(y)
   then x*y,y
    else f(y+1.0)
 f 1.0
f 0.2;; val it: float * float = (1.0, 5.0)
f 3.14;; val it: float * float = (157.0, 50.0)
Here is an example where the integers, er will be integers eventually rather, have not been "simplified"
f 0.14;; val it: float * float = (35.0, 250.0)
Checking the fractional part to be less than .01, as opposed to equaling exactly zero, got around this issue but I don't really like that solution. So I set it back to what you see in the code above. I am using the function below for some of the values that do not simplify though:
let g (x,y) =
 let rec f k =
  if x/k = flr(x/k)
   then g(k)
    else f(k-1.0)
 and g k =
  if y/k = flr(y/k)
   then x/k,y/k
    else f(k-1.0)
 if x < y then f x else f y
Anyway, the main issue is this value:
3.142857143
Homeboy just keeps grinding without stack errors and I'm not sure what I've ran into here. Any clarity would be awesome! Thanks y'all.
 
    