std::floor,...std::floorl(3)

πŸ“¦ version 2024.07.05, in nixpkgs unstable, opensuse-leap 16.0

🌸 std::floor, std::floorf, std::floorl πŸ’…

okay so bestie, this is the <cmath> page for the floor family β€” <cmath> version, C++ Standard Library vibes. and honestly? it's giving "round down and slay." let's get into it ✨


πŸŽ€ SYNOPSIS πŸŽ€

Defined in header <cmath>

float       floor ( float num );

double      floor ( double num );                            (until C++23)

long double floor ( long double num );
constexpr /* floating-point-type */                          (since C++23)
            floor ( /* floating-point-type */ num );

float       floorf( float num );                     (1) (2) (since C++11)
                                                         (constexpr since C++23)

long double floorl( long double num );                   (3) (since C++11)
                                                         (constexpr since C++23)

Additional overloads (since C++11):

Defined in header <cmath>

template< class Integer >                            (A) (constexpr since C++23)
double      floor ( Integer num );

so like, what do these actually do πŸ‘€

  • 1-3) Computes the largest integer value not greater than num. that's it. that's the whole job. floor goes down πŸ¦‹
  • Since C++23, the library provides overloads of std::floor for all cv-unqualified floating-point types as the type of the parameter.
  • A) Additional overloads are provided for all integer types (since C++11), and those get treated as double.

πŸ’– PARAMETERS πŸ’–

  • num β€” a floating-point or integer value. that's the input, bestie 🫢

πŸ‘‘ RETURN VALUE πŸ‘‘

If no errors occur, you get back the largest integer value not greater than num, which is to say ⌊numβŒ‹. periodt.

(the original page has a little picture here, math-floor.svg, showing num on the number line. imagine a cute lil staircase. that's the vibe πŸŽ€)

πŸ”₯ ERROR HANDLING πŸ”₯

Errors are reported as specified in math_errhandling. (iykyk)

If the implementation supports IEEE floating-point arithmetic (IEC 60559), then:

  • The current rounding mode has no effect. none. zero. it does not care πŸ’€
  • If num is ±∞, it is returned, unmodified.
  • If num is Β±0, it is returned, unmodified.
  • If num is NaN, NaN is returned.

✨ NOTES ✨

  • FE_INEXACT may (but isn't required to) be raised when rounding a non-integer finite value.
  • The largest representable floating-point values are exact integers in all standard floating-point formats, so this function never overflows on its own 🌈 β€” however, the result may overflow any integer type (including std::intmax_t) when stored in an integer variable. so like, watch out when you shove it into an int, no cap.
  • The additional overloads are not required to be provided exactly as (A). They only need to be sufficient to ensure that for their argument num of integer type, std::floor(num) has the same effect as std::floor(static_cast<double>(num)). same energy, different implementation, we love flexible queens πŸ’…

🧚 EXAMPLE 🧚

// Run this code

#include <cmath>
#include <iostream>

int main()
{
    std::cout << std::fixed
              << "floor(+2.7) = " << std::floor(+2.7) << '\n'
              << "floor(-2.7) = " << std::floor(-2.7) << '\n'
              << "floor(-0.0) = " << std::floor(-0.0) << '\n'
              << "floor(-Inf) = " << std::floor(-INFINITY) << '\n';
}

Output:

floor(+2.7) = 2.000000
floor(-2.7) = -3.000000
floor(-0.0) = -0.000000
floor(-Inf) = -inf

see how -2.7 becomes -3.000000? floor goes down, always down, and -0.0 keeps its whole sign situation. iconic behavior honestly 😭


πŸ¦‹ SEE ALSO πŸ¦‹

  • ceil, ceilf, ceill β€” nearest integer not less than the given value (function, C++11 Γ—2)
  • trunc, truncf, truncl β€” nearest integer not greater in magnitude than the given value (function, C++11)
  • round, roundf, roundl, lround, lroundf, lroundl, llround, llroundf, llroundl β€” nearest integer, rounding away from zero in halfway cases (function, C++11 Γ—9)
  • C documentation for floor β€” for the C girlies πŸ“

πŸ’œ and that's the whole page, bestie! this one's from http://cppreference.com, dated 2024.06.10, and it's part of the C++ Standard Library manual, section std::floor,...std::floorl(3). go forth and round down. slay βœ¨πŸŽ€

πŸ“¦ where this page comes from