Francais | English | Espanõl

Floor function

From Wikipedia, the free encyclopedia

Jump to: navigation, search

In mathematics, the floor function of a real number x, denoted <math>\lfloor x \rfloor</math> or floor(x), is the largest integer less than or equal to x (formally, <math> \forall x \in \mathbb{R} </math> <math> \lfloor x \rfloor=\sup\{n\in\mathbb{Z}\mid n\le x\}</math>). For example, floor(2.9) = 2, floor(−2) = −2 and floor(−2.3) = −3. For nonnegative x, a more traditional name for floor(x) is the integral part or integral value of x. The function <math>x -\lfloor x\rfloor</math>, also written as x mod 1, or {x}, is called the fractional part of x. Every fraction x can be written as a mixed number, the sum of an integer and a proper fraction. The floor function and fractional part functions extend this decomposition to all real values.

Contents

[edit] Some properties of the floor function

  • One has
<math> \lfloor x\rfloor \le x < \lfloor x \rfloor + 1</math>
with equality on the left if and only if x is an integer.
  • The floor function is idempotent: <math>\lfloor\lfloor x\rfloor\rfloor=\lfloor x\rfloor</math>.
  • For any integer k and any real number x,
<math> \lfloor k+x \rfloor = k + \lfloor x\rfloor.</math>
  • The ordinary rounding of the number x to the nearest integer can be expressed as floor(x + 0.5).
  • The floor function is not continuous, but it is upper semi-continuous. Being a piecewise constant function, its derivative is zero where it exists, that is, at all points which are not integers.
  • If x is a real number and n is an integer, one has nx if and only if n ≤ floor(x). In fancy language: the floor function is part of a Galois connection; it is the upper adjoint of the function that embeds the integers into the reals.
  • Using the floor function, one can produce several explicit (yet impractical) formulas for prime numbers.
  • For real, non-integer x, the floor function has the Fourier series representation
<math>\lfloor x\rfloor = x - \frac{1}{2} + \frac{1}{\pi} \sum_{k=1}^\infty \frac{\sin(2 \pi k x)}{k}.</math>
  • If m and n are coprime positive integers, then
<math>\sum_{i=1}^{n-1} \lfloor im / n \rfloor = (m - 1) (n - 1) / 2</math>

[edit] The ceiling function

A closely related mathematical function is the ceiling function, given x, ceiling(x) also denoted by <math>\lceil x \rceil</math> is the function defined as <math> \lceil x \rceil=\inf\{n\in\mathbb{Z}\mid x\le n\}</math>. This is, the smallest integer not less than x. For example, ceiling(2.3) = 3, ceiling(2) = 2 and ceiling(−2.3) = −2.

[edit] Some properties of the ceiling function

  • It is easy to show that:
<math>\lceil x \rceil = - \lfloor - x \rfloor</math>
  • Also:
<math>x \leq \lceil x \rceil < x + 1</math>
  • For any integer k, we also have the following equality:
<math>\lfloor k / 2 \rfloor + \lceil k / 2 \rceil = k</math>.

[edit] The operator (int) in C

C and related programming languages have a feature called type casting which allows to turn a floating point value into an integer by prefixing it with (int). This operation is a mixture of the floor and ceiling function: for positive or 0 x it returns floor(x), and for negative x it returns ceiling(x).

This operation loses significant data, and can therefore magnify rounding errors with disastrous consequences. For instance, (int)(0.6/0.2) will return 2 in most implementations of C, even though 0.6/0.2 = 3. The reason is that computers work internally with the binary numeral system, and it is not possible to represent the numbers 0.6 and 0.2 by a finite binary string. So some rounding errors occur, and the result is computed as 2.999999999999999555910790149937 which the (int) operator will convert to 2.

Many other languages, such as Java (tested with Sun JDK version 1.5.0_05) and Perl (as of version 5.8.0) behave similarly and exhibit rounding errors, as does the POSIX floor() function, every time floating point types are used to store real values.

Because of issues like these, most modern calculators use the decimal numeral system internally, but this only solves a small part of possible problems, and not the fact that (int)((4.0/9.0) * 9.0) will still return 3 instead of 4, even when using decimal floating point representation at any datatype precision (The effective result comes from the truncation of 0.44444...4444 * 9.0 = 3.99999...9996, for which either a binary or decimal internal base has no influence on the precision of the result and the error, even when correct rounding to the nearest representable number is used throughout the calculation).

A more elegant solution is to use better numeric datatypes to allow representing rational values exactly, or to avoid aggravating rounding errors which will only appear when non polynomial functions are used in the calculation. For example, a pair can be used for storing a floating point numerator and a positive integer divisor (a solution used in the Calculator accessory in Windows): all intermediate calculation and storage use this datatype, and the decimal floating point value is computed only for the final display of the calculator, with correct rounding up to the displayed precision.

[edit] Truncation

While the floor function only outputs integers, the act of real truncation, or "cutting off the numbers", may be performed at any specified position, not necessarily after the units digit.

[edit] Typesetting

The floor and ceiling function are usually typeset with left and right square brackets where the upper (for floor function) or lower (for ceiling function) horizontal bars are missing, and, e.g., in the LaTeX typesetting system these symbols can be constructed with the \lfloor, \rfloor, \lceil and \rceil commands.bg:Функция скобка de:Gaußklammer es:Función parte entera fr:Partie entière he:פונקציית הערך השלם it:Parte intera (funzione) ja:床関数 nl:Entierfunctie nn:Golvfunksjon pl:Część całkowita ru:целая часть sl:celi del zh:高斯符號

Personal tools