library function doesn't need rational_ prefix