python의 math에는 trunc가 있습니다. 이 함수는 소수 부분을 날린 결과를 돌려줍니다. 어떤 결과를 출력하는지 간단하게 알아보도록 하겠습니다.


 먼저, math.floor(3.4)와 math.trunc(3.4)를 비교해 보겠습니다. 전자는 3.4보다 작거나 같은 수 중 제일 큰 수인 3을 리턴합니다. 다음에, trunc입니다. .4 부분을 날린 결과는 3이므로, 3을 돌려주겠군요.

 

 결과를 보니까 3, 3으로 같음을 확인할 수 있습니다. n.x에서 소수 부분을 떼어내면 n이 됩니다. 이는 n.x를 넘지 않는 가장 큰 수와 동일합니다. 그러니, 양수일 때에는 floor와 trunc가 같은 결과를 냅니다. 그러면 모든 실수에 대해서 floor와 trunc는 같은 결과가 나올까요? 0보다 작은 실수를 넣어보겠습니다.

 

 

 math.floor(-3.4)와 math.trunc(-3.4)를 비교해 보겠습니다.

 

 그랬더니, 완전히 다른 값이 나왔습니다. floor는 어떤 수 x보다 작거나 같은 수 중 제일 큰 수를 돌려줍니다. -3.4보다 작은 수는 -4, -5, ... 이렇게 있습니다. 이 중 제일 큰 수는 -4이니, -4가 리턴될 겁니다. 그런데, 후자는 그냥 .4만 떼어버립니다. 따라서, -3이 리턴됩니다.

 

 실제로 floor 함수의 설명을 보면, x보다 작은 수 중 제일 큰 것을 돌려준다는 것을 알 수 있습니다.

 


 ceil(-3.4)는 어떨까요? 이것은 -3.4보다 크거나 같은 수 중 제일 작은 수를 돌려줄 겁니다. -3.4보다 큰 수는 -3, -2, -1, ... 요런 순으로 올라가게 됩니다. 이 중 제일 작은 수는 -3입니다.

 

 ceil(-3.4)와 trunc(-3.4)가 같은 값을 리턴함을 볼 수 있습니다.

 

 이는 ceil 함수가 x보다 크거나 같은 수 중 가장 작은 것을 돌려주기 때문입니다. -n.x에서 .x를 빼면 -n이 됩니다. -n.x는 -(n+0.x)로 쓸 수 있어요. 그리고 n+0.x > n을 만족합니다. a<b이면 -a>-b이입니다. 따라서, 음수인 경우에 소수점이 떼어져 버리면, 오히려 수가 더 커지게 됩니다.

 

 -n.x를 보겠습니다. 이 수에서 소수를 떼어버리면 -n이 됩니다. 그런데, -n.x보다 크거나 같은 수는 -n, -(n-1), ... 이 있단 말입니다. 이 중 제일 작은 것은 -n입니다. ceil의 정의와 일치합니다. 따라서, trunc(x)는 x가 양수일 때에는 floor와 같고, 음수일 때는 ceil과 같다고 할 수 있겠습니다.

 

 

 그러면 정수인 경우에는 어떨까요? -n보다 크거나 같은 정수 중 가장 작은 수도 -n입니다. 작거나 같은 정수 중 제일 큰 수도 -n입니다. -n은 소수점도 없기 때문에 소수점을 잘라도 -n이 나옵니다. 따라서, 세 결과가 모두 같게 됩니다.

 

 

 결과는 -3으로 모두 동일함을 알 수 있습니다.