Precision can be explicitely set as second argument for GMP::F.new(). If there is no explicit precision, highest precision of all GMP::F arguments is used. That doesn't ensure that result will be exact. For details, consult any paper about floating point arithmetics. Default precision can be explicitely set by passing 0 to GMP::F.new(). In particular, you can set precision of copy of GMP::F object by: new_obj = GMP::F.new(old_obj, 0) Precision argument, and default_precision will be rounded up to whatever GMP thinks is appropriate.