ceil in C/C++: rounding up

👋 Hey there! In this article, we’ll dive into the ceil function, which lets us round a number up in C/C++. First, we’ll see how to use it with an example and then we’ll try implementing it ourselves. We’ll also look into the differences between ceil, ceill, and ceilf. At the end, you’ll find some exercises for further practice.

Похожее
srand in C++: initializing the random number generator
The srand function is used in C++ for initializing the random number generator. This article will explore how to use this function with examples. At the end of the article, there are exercises for further.
go

How to round a number up in C/C++

To round a number up in C/C++, we can use the built-in ceil function. This function is available after including the <math.h> file. For C++, you can include <cmath>. Here’s what the function prototype looks like:

double ceil (double x);
  • It takes a single argument, the number you wish to round.
  • The function then returns the rounded result.

Let’s see it in action:

#include <cmath>
#include <iostream>

using namespace std;

int main() {
  cout << "ceil(3) = " << ceil(3) << endl;
  cout << "ceil(12.34) = " << ceil(12.34) << endl;
  cout << "ceil(1.0000001) = " << ceil(1.0000001) << endl;
  cout << "ceil(0) = " << ceil(0) << endl;
  cout << "ceil(-0.25) = " << ceil(-0.25) << endl;
  cout << "ceil(-2) = " << ceil(-2) << endl;

  return 0;
}

Program output:

ceil(3) = 3
ceil(12.34) = 13
ceil(1.0000001) = 2
ceil(0) = 0
ceil(-0.25) = 0
ceil(-2) = -2

What will be displayed on the screen?

#include <iostream>
#include <cmath>

using namespace std;

int main() {
  double a = -12.34;
  cout << ceil(a) << endl;

  return 0;
}
12
-12
13
-13

Implementing ceil ourselves

Let’s give implementing the ceil function a shot:

#include <iostream>

using namespace std;

double my_ceil(double x) {
  // Convert the number to an integer (this truncates the fractional part)
  int int_part = (int)x;

  // If the number is already whole, return it
  if (x == int_part) {
    return int_part;
  }

  // For negative numbers, just return them as integers
  // This is because when rounding up a negative number, we head to the nearest
  // larger negative number (e.g., ceil(-2.3) = -2), 
  // equivalent to a simple integer conversion
  else if (x < 0) {
    return int_part;
  }

  // For positive non-whole numbers, add 1 to the integer part
  else {
    return int_part + 1;
  }
}

int main() {
  cout << "my_ceil(3) = " << my_ceil(3) << endl;
  cout << "my_ceil(12.34) = " << my_ceil(12.34) << endl;
  cout << "my_ceil(1.0000001) = " << my_ceil(1.0000001) << endl;
  cout << "my_ceil(0) = " << my_ceil(0) << endl;
  cout << "my_ceil(-0.25) = " << my_ceil(-0.25) << endl;
  cout << "my_ceil(-2) = " << my_ceil(-2) << endl;

  return 0;
}

Program output:

my_ceil(3) = 3
my_ceil(12.34) = 13
my_ceil(1.0000001) = 2
my_ceil(0) = 0
my_ceil(-0.25) = 0
my_ceil(-2) = -2

Functions ceill and ceilf

Just like ceil, both ceill and ceilf round up the number passed to them. The difference is that they work with different data types: long double for ceill and float for ceilf. Let’s see an example:

#include <cmath>
#include <iostream>

using namespace std;

int main() {
  cout << "ceill(12.34) = " << ceill(12.34) << endl;
  cout << "ceil (12.34) = " << ceil(12.34) << endl;
  cout << "ceilf(12.34) = " << ceilf(12.34) << endl;

  return 0;
}

Output:

ceill(12.34) = 13
ceil (12.34) = 13
ceilf(12.34) = 13

As you can see, they all return the same value but of different types.

Похожее
vector::size in C++ (With Examples)
In C++, the std::vector container is a dynamic array that can resize itself automatically. A common need is to determine how many elements a vector currently holds. Enter the size function! This article will break down how the size function works, show you some practical examples, and give insights into related features of vectors.
go

Exercises

  1. Using ceil:

    • Write a C++ program that prompts the user for a floating-point number.
    • Apply the ceil function to it and display the result.
    • The program should also display the original user input.
  2. Implementing your version of ceil:

    • Using the example provided in this article, write your version of the ceil function. Name your function my_ceil and have it accept a double.
    • Test it with various numbers and compare the results to the built-in ceil function.
  3. Comparing ceil, ceill, and ceilf:

    • Write a program that demonstrates the differences between ceil, ceill, and ceilf.
    • Your program should call all three functions and display their results.

Discussion

© 2024, codelessons.dev