최근 수정 시각 : 2024-02-13 10:29:33

최대 정수 함수

바닥 함수에서 넘어옴
이 문서는
이 문단은
토론을 통해 표제어를 최대 정수 함수로 하기로 합의되었습니다. 합의된 부분을 토론 없이 수정할 시 편집권 남용으로 간주되어 제재될 수 있습니다.
아래 토론들로 합의된 편집방침이 적용됩니다. 합의된 부분을 토론 없이 수정할 시 편집권 남용으로 간주되어 제재될 수 있습니다.
[ 내용 펼치기 · 접기 ]
||<table width=100%><table bordercolor=#ffffff,#1f2023><bgcolor=#ffffff,#1f2023><(>토론 - 표제어를 최대 정수 함수로 하기
토론 - 합의사항2
토론 - 합의사항3
토론 - 합의사항4
토론 - 합의사항5
토론 - 합의사항6
토론 - 합의사항7
토론 - 합의사항8
토론 - 합의사항9
토론 - 합의사항10
토론 - 합의사항11
토론 - 합의사항12
토론 - 합의사항13
토론 - 합의사항14
토론 - 합의사항15
토론 - 합의사항16
토론 - 합의사항17
토론 - 합의사항18
토론 - 합의사항19
토론 - 합의사항20
토론 - 합의사항21
토론 - 합의사항22
토론 - 합의사항23
토론 - 합의사항24
토론 - 합의사항25
토론 - 합의사항26
토론 - 합의사항27
토론 - 합의사항28
토론 - 합의사항29
토론 - 합의사항30
토론 - 합의사항31
토론 - 합의사항32
토론 - 합의사항33
토론 - 합의사항34
토론 - 합의사항35
토론 - 합의사항36
토론 - 합의사항37
토론 - 합의사항38
토론 - 합의사항39
토론 - 합의사항40
토론 - 합의사항41
토론 - 합의사항42
토론 - 합의사항43
토론 - 합의사항44
토론 - 합의사항45
토론 - 합의사항46
토론 - 합의사항47
토론 - 합의사항48
토론 - 합의사항49
토론 - 합의사항50
||


특수함수
Special Functions
{{{#!wiki style="margin: 0 -10px -5px; min-height: calc(1.5em + 5px)"
{{{#!folding [ 펼치기 · 접기 ]
{{{#!wiki style="margin: -5px -1px -11px; word-break: keep-all"
<colbgcolor=#383B3D><colcolor=#fff> 적분 오차함수(error function)(가우스 함수 · 가우스 적분 함수) · 베타 함수(불완전 베타 함수) · 감마 함수(불완전 감마 함수 · 로그 감마 함수) · 타원 적분 · 야코비 타원 함수 · 지수 적분 함수 · 로그 적분 함수 · 삼각 적분 함수 · 쌍곡선 적분 함수 · 프레넬 적분 함수 · 구데르만 함수
미분방정식 르장드르 함수[math(^\ast)] (구면 조화 함수) · 베셀 함수 · 에르미트 함수 · 라게르 함수 · 에어리 함수
역함수 브링 근호 · 람베르트 W 함수 · 역삼각함수
급수 제타 함수 · 후르비츠 제타 함수 · 세타 함수 · 초기하함수 · 폴리로그함수 · 폴리감마 함수 · 바이어슈트라스 타원 함수
정수론 소수 계량 함수 · 소인수 계량 함수 · 뫼비우스 함수 · 최대공약수 · 최소공배수 · 약수 함수 · 오일러 피 함수 · 폰 망골트 함수 · 체비쇼프 함수 · 바쁜 비버 함수
기타 헤비사이드 계단함수 · 부호 함수 · 테트레이션(무한 지수 탑 함수) · 지시함수 · 바닥함수 / 천장함수 · 허수지수함수 · 혹 함수
[math(^\ast)] 특수함수가 아니라 특정 조건을 만족시키는 다항함수이지만, 편의상 이곳에 기술했다.
}}}}}}}}} ||


1. 정의와 표기법2. 역사3. 수학 교과과정에서
3.1. 성질3.2. 최대 정수 함수 및 그의 합성함수3.3. 방정식 및 부등식의 풀이
4. 정수론고등수학에서의 쓰임5. 컴퓨터에서의 구현
5.1. 엑셀에서의 구현5.2. C, C++ 언어에서 구현
6. 관련 문서


/ floor function[1]

1. 정의와 표기법

[math(\left\lfloor x \right\rfloor = \max \left\{n \in \mathbb{Z}: n \le x \right\})]
[math(\left\lfloor z \right\rfloor = \max \left\{n \in \mathbb{Z}: n \le \Re(z) \right\} + i(\max \left\{n \in \mathbb{Z}: n \le \Im(z) \right\}))][2]

어떤 수 [math(x)]보다 크지 않은, 즉 [math(x)] 이하의 정수 중 가장 큰 정수. [math(\left\lfloor x \right\rfloor)]로 표기하며, 간혹 대괄호를 이용하여 [math([x])]로 표기하기도 한다. 영어로는 floor function(바닥 함수[3]), greatest integer function(최대 정수 함수)이라고 한다. 한국과 일본 한정으로 대괄호 표기를 '가우스 기호'[4]로 부르기도 하지만, 이는 어디까지나 구전적인 용례가 잦아지면서 굳어진 표현이므로 정식적인 용어가 아니다. 대한수학회에서는 최대 정수 함수와 가우스 함수 두 가지 이름을 채택했다. 표제어가 가우스 함수가 아닌 '최대 정수 함수'가 된 것은 가우스 함수가 정규 분포 그래프를 말하는 데 쓰이기도 하기 때문이다(특히 영어로 Gaussian이라고 하면 무조건 최대 정수 함수가 아니라 정규 분포를 가리킨다).

이 함수와 짝꿍인 함수로 최소 정수 함수(least integer function)[5]가 있다. 기호로는 [math(\lceil x \rceil)] 또는 [math(]x[)]로 표기하며, [math(x)]보다 작지 않은, 즉 [math(x)] 이상의 정수 중 가장 작은 수를 의미하며, 수식으로 나타내면 다음과 같다.
[math(\lceil x \rceil = \min \left\{n \in \mathbb{Z}: n \ge x \right\})]
[math(\lceil z \rceil = \min \left\{n \in \mathbb{Z}: n \ge \Re(z) \right\} + i(\min \left\{n \in \mathbb{Z}: n \ge \Im(z) \right\}))][6]

사실 고등수학[7]에서는 [math(\lfloor x \rfloor)], [math(\lceil x \rceil)] 표기가 주류이며, [math([x])], [math(]x[)] 표기는 구식이다. [math([x])]가 대중적인 이유는 아무래도 대중에게는 고등수학보다는 입시 중등수학[8]을 접할 기회가 많기 때문이리라.

예를 들어 [math(\left\lfloor2.5\right\rfloor)]의 값을 구하여 보자. [math(2.5)]보다 크지 않은 정수 중 최대의 값은 [math(2)]이므로 [math(\left\lfloor2.5\right\rfloor=2)]이다. 음수의 경우를 예로 들어 보면 [math(\left\lfloor-3.5\right\rfloor)]의 경우 [math(-3.5)]보다 크지 않은 최대의 정수는 [math(-3)]이 아닌 [math(\bf-4)]이므로, [math(\left\lfloor-3.5\right\rfloor=-4)]이다. 양수일 때와는 달리 정수가 아닐 때 절댓값이 증가한다는 점에 주의해야 한다.

위 두 함수를 나타낸 그래프는 다음과 같다.
파일:나무_최대정수함수.svg 파일:나무_최소정수함수.svg
파일:나무_최대정수함수_복소.svg 파일:나무_최소정수함수_복소_수정.svg
[math(y = \lfloor x \rfloor)] [math(y = \lceil x \rceil)]

2. 역사

대괄호 기호를 처음 사용한 것은 다름 아닌 카를 프리드리히 가우스이다. 가우스는 [math(2)]차 잉여 중 특히 [math(2)]차 잉여의 상호 법칙에 대한 연구를 하다가, 어느 값보다 작거나 같은 정수라는 개념이 필요했고, 이를 대괄호를 이용하여 간단히 [math([x])] 라고 표기했다. 가우스는 이 기호에 딱히 이름 같은 것을 부여하진 않았는데[9] 가우스가 발견한 증명 중 [math(3)]번째 증명이 최대 정수 함수를 사용하는 '가우스 판정법'(자세한 것은 [math(2)]차 잉여 항목 참조)을 이용하는 것[10]이었다. 덤으로 가우스 정수 체계 하에서도 이 법칙이 성립함을 보이긴 하지만, 이건 최대 정수 함수와는 관련이 없다.

다만, 가우스보다 몇 년 이전에 르장드르(Adrien-Marie Legendre)가 [math(n!)]의 [math(p)]진 값매김(valuation) [math(\nu_p(n!))][11]에 대한 공식[12]을 구하면서 최대 정수 함수 개념을 언급한 것으로 보아서는, 다른 수학자들도 대괄호 기호를 쓰지만 않았을 뿐이지 이 개념의 포텐셜을 어느 정도는 직감했을 것이다. 실제로 곧이어 리만-스틸체스 적분이 정립되면서 최대 정수 함수는 급수나 리만합 등을 나타내는 데에 쓰일 수가 있었고, 따라서 해석적 정수론에 적극적으로 도입되었다. 소수정리의 이전 단계인 [math(n)]과 [math(2n)] 사이에 항상 소수가 존재한다는 베르트랑 가설(Bertrand's postulate)을 체비셰프(Chebyshev)가 증명하는 데에도 [math(\left\lfloor x\right\rfloor+\left\lfloor\dfrac x{30}\right\rfloor \le \left\lfloor\dfrac x2\right\rfloor+\left\lfloor\dfrac x3\right\rfloor+\left\lfloor\dfrac x5\right\rfloor)] 같은 최대 정수 함수의 성질을 이용하였다.

소수 부분을 나타내는 함수 [math(\left\{x\right\} = x - \left\lfloor x\right\rfloor)]도 최대 정수 함수와 비슷하게 주목을 받았는데, 정수론에서 합동식이 나오며 몫이 쩌리가 되고 나머지가 주류가 된 것처럼 나중 가면 이게 더 많이 쓰일 때도 있었다. 실제로 급수 계산 등에서 [math(\left\lfloor x\right\rfloor)]는 [math(x - \left\{x\right\})]로 대체되어, 보통 '주항' [math(x)]에 관한 해석적인 계산은 쉽게 나타나고 '오차항' [math(\{x\})]에 관한 계산이 복잡한 경우가 많다. 물론 몫의 개념이 필요할 때도 있는 만큼 정수부분/소수부분 둘다 별도의 쓰임새가 있다.

현대의 바닥 함수 기호([math(\lfloor\cdot\rfloor)]) 및 천장 함수 기호([math(\lceil\cdot\rceil)])는 비교적 늦게 나타났는데, [math(1962)]년에 정보 공학자인 케네스 아이버슨(Kenneth Iverson)이 그의 저서 《프로그래밍 언어》(A Programming Language, 1962)에서 처음으로 도입했고, 나중에 수학 전반 분야에서 표준화되었다. 이는 대괄호에 워낙 겹치는 의미가 많아서[13] 새로운 표기법을 받아들인 것으로 보인다. 소수부를 나타내는 [math(\left\{x\right\} = x - \left\lfloor x\right\rfloor)]는 여전히 잘 사용되고 있다.

3. 수학 교과과정에서

고등학교 수학 교육과정에서 부가적으로 설명하는 수준으로 등장하는 개념이다. 수학I의 지수와 로그 문제에서 연습문제로 간간이 나오는 것을 시작으로, 수학Ⅱ의 함수의 극한과 연속 파트에서 '가우스 기호를 포함한 함수의 극한'이 연습문제에서 나오고, 이후에도 '불연속함수' 및 '사잇값 정리'의 예시로 등장한다. 각종 모의고사의 수학 영역에서도 해당 기호에 관한 설명과 함께 간혹 등장한다. 아래와 같은 형태로 등장하며, 저 기호와 설명을 제외하고는 다른 설명은 전혀 등장하지 않는다. '가우스 기호'라는 이름은 정식 명칭이 아니기 때문에 직접적으로 쓰지 않는 경우가 많다.
[math(f(x)=\left[x\right])] (단, [math(\left[x\right])]는 [math(x)]보다 크지 않은 최대의 정수)

사실 조작 자체는 초등학교에서도 어림으로 배웠다고 말할 수도 있겠다. 실제로 [math(f(x; m) = 10^{m} \left\lfloor 10^{-m}x \right\rfloor)] 같은 식으로, 십진법에서 [math(m)]번째 자리 버림 등을 생각할 수는 있다. 다만 음수일 경우에는 상술한 예시([math(\left\lfloor-3.5\right\rfloor=-4)]) 처럼 흔히 생각하는 '버림'과는 패턴이 달라진다. 즉, 양수에선 올림이 최소 정수 함수와 같고 버림은 최대 정수 함수와 같지만, 음수에선 반대로 올림은 최대 정수 함수와 같고 버림은 최소 정수 함수와 같다. 부호에 따른 차이를 보정하기 위해 절댓값부호 함수를 이용해 [math(f(x; m) = \mathrm{sgn}(x) \, 10^{m} \left\lfloor 10^{-m}|x| \right\rfloor)]로 버림을 정의할 수 있겠다.

고등학교 문과 수학에서 문과 수험생의 머리를 빠개놓는 데에 일가견을 담당하고 있다. 문과 수학은 범위가 제한된 만큼 변별력 확보를 위해 함수에다가 가우스 기호를 씌워놓는 문제가 많이 출제되는데, 함수의 성질과 가우스 기호 성질을 같이 응용해야 해서 문과 수포자들을 울리곤 한다.

한편으로는 고교수학에서의 기호([math([x])])와 대학 수학에서의 기호([math(\lfloor x \rfloor)])가 달라서 대학 수학을 접할 때 혼선을 일으키기 때문에 대학 쪽의 기호이자 표준인 [math(\lfloor x \rfloor)]로 통일하자는 의견이 나오곤 한다.

3.1. 성질

임의의 실수 [math(x)]에 대하여 [math(\left\lfloor x\right\rfloor)]는 [math(x)]의 정수부이며, [math(x - \left\lfloor x\right\rfloor)]는 [math(x)]의 소수부이다. 이를 응용하면 상용로그 [math(\log)]에 대하여 [math(\left\lfloor\log x\right\rfloor)]는 지표, [math(\log x - \left\lfloor\log x\right\rfloor)]는 가수를 나타낸다는 것을 알 수 있다.

* 최소 정수 함수와 교환될 수 있다. [math(-\left\lfloor -x \right\rfloor = \left\lceil x \right\rceil)]이다.
  • 멱등함수(idempotent function)이다. 즉, [math(\left\lfloor \left\lfloor x \right\rfloor \right\rfloor = \left\lfloor x \right\rfloor)]가 성립한다.
정수 [math(n)]에 대하여
  • [math(n)]보다 크지 않은 정수의 최댓값이란 [math(n)] 그 자신이므로 [math(\left\lfloor n\right\rfloor = n)]이다.[14]
  • [math(\left\lfloor x\right\rfloor = n)]이면 [math(\left\lfloor x\right\rfloor\le x <\left\lfloor x\right\rfloor+1)]이므로 [math(x-1<\left\lfloor x\right\rfloor\le x)]이다.
  • [math(a)]가 양의 정수일 때 [math(a\left\lfloor x\right\rfloor \le \left\lfloor ax\right\rfloor <a(\left\lfloor x\right\rfloor+1))]이다.
  • [math(\left\lfloor x+n\right\rfloor = \left\lfloor x\right\rfloor+n)]이다. 즉, 이 기호 내부의 정수를 분리할 수 있다.
두 자연수 [math(a)], [math(b)]에 대하여[15]
  • [math(\left\lfloor\dfrac ab\right\rfloor)]는 [math(a)]를 [math(b)]로 나눈 이고, [math(a - b\left\lfloor\dfrac ab\right\rfloor)]는 [math(a)]를 [math(b)]로 나눈 나머지이다.
합에 대한 규칙
  • 두 실수 [math(x)], [math(y)] 에 대해서 [math(\left\lfloor x\right\rfloor+\left\lfloor y\right\rfloor \le \left\lfloor x+y\right\rfloor \le \left\lfloor x\right\rfloor+\left\lfloor y\right\rfloor+1)] 이다. 이를 [math(n)]개의 실수 [math(a_k)] ([math(k=1,~2,~3,\cdots\cdots,~n)])에 대하여 확장하면, [math(\displaystyle \sum_{k=1}^n \left\lfloor a_k\right\rfloor \le \left\lfloor \sum_{k=1}^n a_k\right\rfloor \le \sum_{k=1}^n \left\lfloor a_k\right\rfloor +n-1)]이 된다.
곱에 대한 규칙 (단, [math(a_k \ge 0)])
  • 두 양의 실수 [math(x)], [math(y)] 에 대해서 [math(\left\lfloor x\right\rfloor \left\lfloor y\right\rfloor \le \left\lfloor xy\right\rfloor < \left(\left\lfloor x\right\rfloor+1\right)\left(\left\lfloor y\right\rfloor+1\right))] 이다.
    • 이를 [math(n)]개의 양의 실수 [math(a_k)]에 대해서 확장하면 [math(\displaystyle\prod_{k=1}^n \left\lfloor a_k\right\rfloor \le \left\lfloor \prod_{k=1}^n a_k\right\rfloor < \prod_{k=1}^n\left(\left\lfloor a_k\right\rfloor+1\right))] 이다.
적분급수와의 관계
  • 수열생성함수 [math(f(x))]에 대해서 다음이 성립한다. 이는 4번째 문단에서 후술.
    [math(\displaystyle \sum_{x=m}^{n} f(x) = \int_{m}^{n} f(x) \, \mathrm{d}\lfloor x \rfloor)]

3.2. 최대 정수 함수 및 그의 합성함수

가장 기본적인 경우인 [math(y=\left\lfloor x\right\rfloor)] 함수를 생각해 보면, 이런 형태계단형 그래프가 된다. [math(y = a\left\lfloor x\right\rfloor+b)]라는 함수는 [math(y)]축으로 [math(a)]배 늘이고, [math(b)]만큼 평행 이동한 것이 된다. [math(y = \left\lfloor cx + d\right\rfloor)]는 좀 복잡한데 [math(y=\left\lfloor c\left(x+\dfrac dc\right)\right\rfloor)]꼴이므로, [math(x)]축 방향으로 [math(\dfrac1c)]배 하고 [math(-\dfrac dc)]만큼 평행이동한 그래프가 된다.

그 다음 흔히 나오는 함수 형태는 [math(y = x - \left\lfloor x\right\rfloor)]인데, 이런 형태톱니파 그래프가 된다. 이 함수에 적당한 기울기를 가지는 직선을 교차시키면, 기울기에 따라서 교차점의 개수를 원하는 만큼 생성시킬 수 있다.

두 개의 최대 정수 함수 기호를 활용하여, [math(y = \left\lfloor x\right\rfloor - \left\lfloor x-0.3\right\rfloor)]를 그래프로 나타내보면, 이와 같은 직각파 그래프가 나온다. 이를 적당히 [math(1)]차 변환 시키면, 임의의 주기나 임의의 진폭을 가지는 직각파 그래프를 만들 수 있다.

삼각파도 고려할 수 있는데, [math(y=\left(-1\right)^{\lfloor x\rfloor}\left(x-\lfloor x\rfloor\right)+\theta\left(\left(-1\right)^{\lceil x\rceil}\right))]의 식으로 표현 가능하며 최소 정수 함수와 헤비사이드 계단 함수[16][17]까지 동원해야 하는 복잡한 과정을 거친다. 간단히 말하면 톱니파에서 짝수 번째 수열을 음수로 반전시킨 뒤 원래 그래프 높이만큼 평행이동시키는 식으로 구현한다.

이 기호가 들어간 함수의 그래프의 성격을 특정 짓기란 어려운데, 사실상 유일한 공통점은 '불연속점'이 존재한다는 것뿐이다.[18] 이 특성 때문에 도함수가 정의되지 않는다. 원시함수는 존재하긴 하지만 큰 의미를 부여하긴 힘들다.

3.3. 방정식 및 부등식의 풀이

고교 교과과정에서 최대 정수 함수가 포함된 방정식이 등장한다. 미지수에 이 기호가 있는 경우, 그 해를 쉽게 찾는 방법이 특별한 해법이 있지는 않다. 최대 정수 함수에 관한 기호를 이용하면 특이한 해를 가지는 방정식을 얼마든지 만들 수 있다.

이런 방정식의 가장 기초적인 해법은 일반적으로 [math(\left\lfloor x\right\rfloor)]가 미지수로 주어진 방정식에서는 [math(t = \left\lfloor x\right\rfloor)]등으로 치환하여 해를 먼저 구한 후, 그 해들 중 정수인 것만을 찾는 방법을 사용한다. [math(t)]로 치환했을 때 해를 구할 수 있는 함수 꼴로 나오는 경우에만 일반적인 해법을 적용하여 해를 구할 수 있다.

최대 정수 함수 기호가 사용된 방정식은 기호로 묶인 부분을 치환하는 방법으로 풀 수 있다. 예를 들어 [math(a\left\lfloor bx+c\right\rfloor+d = 0)]이란 식은 [math(t = \left\lfloor bx+c\right\rfloor)]로 놓고 [math(at+d = 0)]로 변형하여 [math(t)]의 해를 먼저 구한 뒤, 환원하여 [math(x)]의 해를 구하는 것이다. 이는 최대 정수 함수가 중첩되어 사용된 경우에도 확장하여 적용이 가능하다.

하지만 치환으로 해결할 수 없는 경우에는 대체로 일반적인 해법이 존재하지 않는다. 아래의 예제들만 봐도 단순해 보이는 경우에도 여러 경우의 수가 나오는 것을 확인할 수 있다.

아래 언급되는 간단한 방정식의 경우도 다양한 경우가 나온다.
  • 최대 정수 함수 특성상 방정식의 해가 부등식 처럼 특정한 범위로 나올 수 있다. [math(\left\lfloor x\right\rfloor=1)] 의 해집합은 [math(1 \le x < 2)] 를 만족하는 모든 실수이다.
    반대로 임의의 두 실수 [math(a)], [math(b)] [math(\left(a<b\right))]가 [math(a \le x < b)]를 만족할 때, 다음과 같은 방식으로 동치인 식을 만들어 낼 수 있다. 각 변에서 [math(a)]를 빼고 [math((b-a))]로 나누면 식은 [math(0 \le \dfrac{x-a}{b-a} < 1)]로 변형된다. 그리고 이 식은 [math(\left\lfloor\dfrac{x-a}{b-a}\right\rfloor = 0)]과 같다.
그러나 최대 정수 함수의 특성상 해가 없는 경우도, 단 한 개의 해를 가지는 경우도, 여러 개의 해를 가지는 경우도, 무한한 해를 가지는 경우도 모두 존재한다.
  • [math(2\left\lfloor x\right\rfloor = 1)] 이라는 방정식은 [math(\left\lfloor x\right\rfloor=\dfrac12)]이 되므로 이 방정식의 해는 존재하지 않는다.
  • [math(2x - \left\lfloor x\right\rfloor = 0)]은 해가 [math(x=0)] , [math(x=-\dfrac12)]이다.
  • [math(2x - \left\lfloor x\right\rfloor - \dfrac12 = 0)]은 해가 [math(x=\pm\dfrac14)]로 [math(2)]개이다.
  • [math(\dfrac32x - \left\lfloor x\right\rfloor - \dfrac1{10} = 0)]은 해가 [math(3)]개이며 [math(\dfrac{133}{100}x - \left\lfloor x\right\rfloor + \dfrac1{10} = 0)]은 해가 [math(4)]개이고, [math(\dfrac54x - \left\lfloor x\right\rfloor + \dfrac1{10} = 0)]은 해가 [math(5)]개나 된다. [math(x)]의 기울기를 잘 조절하면 임의의 개수의 해를 가지는 방정식을 만들 수 있다. 그래프로 장난질을 좀 치면 이런 해집합을 가지는 방정식도 만들 수 있다.
  • 이산적인 해가 무한히 존재하는 방정식도 있다. 예를 들어 [math(x - \left\lfloor x\right\rfloor = 0)]이라는 방정식은 모든 정수가 해이다.
  • [math(\left\lfloor x\right\rfloor - \left\lfloor x - 0.3\right\rfloor)]의 값은 [math(x)]의 소수 부분이 [math(0.3)] 미만이면 [math(1)]이고, [math(0.3)] 이상이면 [math(0)]이다. 좀더 일반적으로 [math(\left\lfloor x\right\rfloor - \left\lfloor x - a\right\rfloor ~\left(0<a<1\right))] 꼴의 식은 [math(x)]의 소수부분이 [math(a)] 미만이면 [math(1)]이고, [math(a)] 이상이면 [math(0)]이다. 그러므로 [math(\left\lfloor x\right\rfloor - \left\lfloor x - 0.3\right\rfloor = 1)]이라는 방정식을 세우면 [math(1)]의 주기를 가지는 펄스 형태의 해 집합이 나타난다.[19]
  • 심지어는 그래프가 자기 자신의 식을 그리는 것도 만들 수 있다.

4. 정수론고등수학에서의 쓰임

대학 수학 초반부에는 해석학[20]에도 대수학에도 나올 일이 없는 대상이라, 최대 정수 함수는 대개의 사람들에게는 고등학교 때의 지나가던 불연속함수의 예시 중 하나 정도로 잊혀지는 것이 보통이다. 뜬금없이 물리학에서 톱니파, 직각파 등을 설명할 때 등장하는 정도. 대신에 정수론을 파고 들어가면 예상 밖의 장소에서 간간히 튀어나오고, 정수를 취급하면서 해석학도 나오는 해석적 정수론 등에서는 강력한 도구 중 하나가 된다.

정수론에서의 사용 예시 중 하나는 팩토리얼 [math(n!)]을 나누는 소수 [math(p)]의 값매김(즉, [math(p^e|n!)]인 최대의 정수 [math(e)])을 [math(\displaystyle e = \sum_{k=1}^\infty \left\lfloor \frac n{p^k} \right\rfloor)]로 구하는 것이다. 올림피아드 문제 등에서 '[math(2018!)] 뒤에 오는 [math(0)]의 개수는?'[21] 등의 문제에나 나오는 것이라고 과소평가할 수도 있겠지만, 이것을 이용해 이항계수가 소수로 나누어 떨어지는지 아닌지의 여부를 판정할 수 있고, 이 성질은 상술한 베르트랑 가설을 증명하는 데에 사용된다. 간단히 개요만 설명한다면 [math(\dbinom{2n}n)]의 [math(p)]진 값매김이 [math(p < n < 2n)]일 때는 확정적으로 [math(1)]이 되고, 그 외의 경우에서는 [math(\left\lfloor \log_pn \right\rfloor)] 이하가 된다는 것을 이용하는 것이다. 자세한 증명은 여기여기를 참고.

최대정수함수의 또 다른 용도는 해석적 정수론에서 급수에 대한 근사를 구할 때 사용된다. 리만-스틸체스 적분을 알고 있다면, 수열의 합을 다음의 최소정수함수에 대한 스틸체스 적분으로 대체할 수 있다.

[math(\displaystyle \sum_{a\le n\le b}f(n)=\int_{a-}^{b+}f(x) \,\mathrm{d}\!\left\lfloor x\right\rfloor)]

여기서 부분적분을 활용하면 다음을 얻는다.

[math(\displaystyle \int_{a-}^{b+} f(x) \,\mathrm{d} \!\left\lfloor x\right\rfloor=\int_a^b f(x)\,\mathrm{d}x+\frac{f(a)+f(b)}{2}+\int_{a-}^{b+}f'(x)\left(\{x\}-\frac12\right)\!\mathrm{d}x)]

중간 과정을 약간 생략하며 이 과정을 반복하면 다음의 오일러-매클로린 공식을 얻을 수 있다. 자세한 증명은 오일러-매클로린 공식 문서 참고.

[math(\displaystyle \sum_{a\le n\le b}f(n)=\int_a^b f(x)\,\mathrm{d}x+\frac{f(a)+f(b)}{2}+\sum_{k=1}^\infty\frac{B_{2k}}{(2k)!}\left\{f^{(2k-1)}(b)-f^{(2k-1)}(a)\right\})]

여기서 [math(B_{2k})]는 베르누이 수이다. 이 공식 혹은 비슷한 테크닉을 활용하면 스털링 근사, 오일러-마스케로니 상수, 리만 제타 함수의 근사식 등을 얻을 수 있다. 다음의 푸리에 급수 전개도 이러한 맥락에서 활용되고는 한다.

[math(\displaystyle \left\lfloor x\right\rfloor=x-\frac12 +\sum_{n=1}^\infty\frac{\sin(2n\pi x)}{n\pi}\quad\left(x\notin\mathbb Z\right))]

위 급수 그래프 보기

5. 컴퓨터에서의 구현

컴퓨터에서는 [ ] 기호를 배열 등 다른 뜻으로 사용하는 경우가 많아 일반적으로 별도의 함수를 이용한다.

5.1. 엑셀에서의 구현

Microsoft Excel에서는 INT 함수를 이용하여 INT(X) 라는 수식으로 원하는 결과를 얻을 수 있다. 이는 음수에서도 잘 동작한다. FLOOR 라는 함수도 있는데, FLOOR(X,1) 로 주면 동일하게 동작한다.

유사한 동작을 하지만, 약간 다르게 동작하는 함수도 있다. 내림 함수인 'ROUNDDOWN'을 이용해서 ROUNDDOWN(X,0) 으로 구현할 수 있지만, 양수에서만 동일하게 동작하고, 음수에서는 약간 다르게 동작한다. TRUNC(X) 도 ROUNDDOWN 과 동일하게 동작한다.[22][23][24]
양수에서의 동작 음수에서의 동작
INT(3.5) = 3 INT(-3.5) = -4
FLOOR(3.5 , 1) = 3 FLOOR(-3.5 , 1) = -4
ROUNDDOWN(3.5 , 0) = 3 ROUNDDOWN(-3.5 , 0) = -3
TRUNC(3.5) = 3 TRUNC(-3.5) = -3

5.2. C, C++ 언어에서 구현

C, C++ 언어에서는 math 라이브러리 에 floor() 함수가 존재한다.
floor(double x);
floorf(float x);
double floorl(long double x);
C math 라이브러리의 floor() 함수
위 함수들은 C99 기준이며, C90 에는 double 함수만 존재한다.
floor (double x);
floor (float x);
double floor (long double x);
C++ math 라이브러리의 floor() 함수
C++ 에서는 함수 오버로딩이 가능하기에 함수 이름이 모두 floor() 로 같다. 위는 C++98 기준이며, C++11 에는 오버로딩을 위한 double floor (T x); 같은 타입도 추가되어 있다.

위 math 라이브러리의 함수들은 리턴값의 타입이 변경되지 않으므로, 마지막에 int 로 캐스팅 해서 대입하면 된다. 참고로, 원래 입력의 타입을 변경하지 않고 리턴하는 이유는 int 변수 보다 큰값에 대한 처리를 프로그래머에게 넘기기 위해서이다. 예를 들어 double 은 INT_MAX 보다 훨씬 큰 값을 저장할 수 있는데, int 로 미리 변환해서 넘겨 버리면 오버플로를 대처할 수 없게 된다.

math 라이브러리 없이 사용하려면 int 캐스팅을 이용해서 간단히 구현할 수 있다. 다만 이 경우는 음수에서는 정상 동작하지 않기에 아래와 같은 함수를 하나 생성해서 쓰면 된다. 이 역시 오버플로에 대해서는 고려되어 있지 않다.
my_floor(double a)
{
(int) ( ((a >= 0) || (a == ((int)a))) ? a : a-1 ) ;
}

6. 관련 문서


[1] greatest integer function도 간혹 쓰인다.[2] 정의역이 복소수인 경우로, 실수부와 허수부에 각각 최대 정수 함수가 적용된 가우스 정수가 나온다.[3] 간혹 마루 함수[4] 가우스가 최대 정수 함수를 정의할 때 이 기호를 최초로 썼기 때문이다.[5] 천장 함수(ceiling function)라고도 한다.[6] 마찬가지로 실수부와 허수부에 각각 최소 정수 함수가 적용된 가우스 정수가 나온다.[7] 고교수학이 아니라, 대학교 이상의 수준의 수학을 고등수학이라고 한다. 왜냐하면 중고등학교 교육과정 전체를 중등 교육과정, 대학교 및 대학원 교육과정을 고등 교육과정으로 정의하기 때문이다.[8] 중고등학교 교육과정 하의 수학[9] 이 기호에 엄연히 '대괄호'란 이름이 붙어있으니 딱히 새 이름 붙일 필요성은 못 느꼈을 수도 있다.[10] 다만, 현재 정수론 교과서에 나오는 것은 고트홀트 아이젠슈타인(Gotthold Eisenstein)이 다시 정리한 형태이다.[11] [math(\nu_p(n) = \begin{cases}\max\{m\in\mathbb N:p^m|n\} & (n\ne0) \\ \infty & (n=0)\end{cases})]
로 나타내며 정수 [math(n)]이 소수 [math(p)]의 [math(m)]제곱 [math(p^m)]으로 나누어 떨어질 때 지수 [math(m)]의 최댓값을 의미한다. 예를 들면 [math(600=2^3\cdot3\cdot5^2)]이므로 [math(\nu_2(600)=3)], [math(\nu_3(600)=1)], [math(\nu_5(600)=2)]이다.
[12] 르장드르의 공식이라고 하는데 [math(\displaystyle \nu_p(n!) = \sum_{i=1}^\infty \left\lfloor\frac n{p^i}\right\rfloor)]이 성립한다. 예를 들어 [math(n=5)]이면 [math(5!=120=2^3\cdot3\cdot5)]이므로 [math(\nu_2(5!)=3)], [math(\nu_3(5!)=1)], [math(\nu_5(5!)=1)]인데 이를 다음과 같이 구할 수 있다는 뜻이다.
[math(\displaystyle \nu_2(5!)=\sum_{i=1}^\infty \left\lfloor\frac5{2^i}\right\rfloor \!= \!\left\lfloor\frac52\right\rfloor + \left\lfloor\frac54\right\rfloor \!= 2+1 = 3 \\ \nu_3(5!)=\sum_{i=1}^\infty \left\lfloor\frac5{3^i}\right\rfloor \!= \!\left\lfloor\frac53\right\rfloor \!= 1 \\ \nu_5(5!)=\sum_{i=1}^\infty \left\lfloor\frac5{5^i}\right\rfloor \!= \!\left\lfloor\frac55\right\rfloor \!= 1)]
[13] 연산 순서를 바꾸는 기본적인 용도를 포함해서 1차 정사각행렬, 구간 정의 등...[14] 위에 서술한 멱등함수와 동치이다.[15] 임의의 두 정수에 대해서도 성립하지만, 음수의 나눗셈을 설명하는 것은 복잡하므로 생략.[16] 양수에서는 [math(1)], 그 외에는 [math(0)]을 내놓는 함수([math(0)]에서는 [math(1/2)]이나 [math(1)]로 정의하기도 한다)로, 디랙 델타 함수원시함수이다. 디랙 델타 함수를 연구한 올리버 헤비사이드의 이름을 땄다.[17] [math(\theta ((-1)^{\lceil x \rceil}))] 대신 [math(bold{1}_{mathbb N} ((-1)^{lceil x rceil}))]를 써도 상관 없긴 하다. 특정 구간에서 1만큼 y축 평행이동을 시킬 수만 있으면 된다.[18] 삼각파는 연속이 아닌가 싶지만, 너무나도 삐죽빼죽해서 미분이 안 된다는 건 매한가지다.[19] 반대로 이야기하면, 펄스 함수를 이 최대 정수 함수를 이용해서 표현할 수도 있다.[20] 나오기는 한다. 오일러-마스케로니 상수 정의 중 적분식에 등장한다.
[math(\displaystyle \gamma =\int_1^\infty \left( \frac 1{\lfloor x \rfloor} - \frac 1x \right) \mathrm{d}x )]
[21] 참고로 풀이는 [math(\displaystyle \sum_{n=1}^{\infty} \left\lfloor\frac{2018}{5^n}\right\rfloor)]이다.[22] 일반적으로 rounddown 을 floor function 과 동일하게 해석하지만, 엑셀에서는 서로 다르게 동작한다.[23] TRUNC 함수는 최대 정수 함수를 처음 배우는 학생들이 저지르는 실수(...)에 의한 결과를 내보낸다. [math(\operatorname{TRUNC}(x)=\operatorname{sgn}x\lfloor |x| \rfloor)][24] CEILING함수와 ROUNDUP함수의 관계도 똑같다.