fix float precision bug