天井関数と床関数

天井関数と床関数

天井関数

 天井関数 (ceiling function) は、ある実数 $x$ に対して $x$ 以上の最大の整数を返す関数です。$\lceil x \rceil$ あるいは $\mathrm{ceil}(x)$ の記号で表されます。

 Python の math.ceil(x) を使って、天井関数の戻り値を確認してみましょう。

# PYTHON_CEILING_01

import math

# 天井関数の計算例
a = math.ceil(5)
b = math.ceil(3.14)
c = math.ceil(-3.14)

print("ceil(5):", x)
print("ceil(3.14):", x)
print("ceil(-3.14):", x)
ceil(5): 5
ceil(3.14): -3
ceil(-3.14): -3

 NumPy にはユニバーサルな天井関数 numpy.ceil() が用意されています。numpy.ceil() を使って、天井関数のグラフをプロットしてみましょう。

# PYTHON_CEILING_02

import numpy as np
import matplotlib.pyplot as plt

# データを作成
xx_1 = np.linspace(-4, 4, 65)
xx_2 = np.arange(-4, 5)
yy_1 = np.ceil(xx_1)
yy_2 = np.ceil(xx_2)
yy_3 = xx_2 + 1

# 描画エリアの設定
fig, ax = plt.subplots()
ax.grid()
ax.set_title("Ceiling function", fontsize=16)
ax.set_xlabel("x", fontsize=15)
ax.set_ylabel("ceil(x)", fontsize=15)
ax.set_xlim(-4, 4)
ax.set_ylim(-4, 4)

# 天井関数をプロット
ax.scatter(xx_1, yy_1, marker="_", c="blue")
ax.scatter(xx_2, yy_2, c="blue")
ax.scatter(xx_2, yy_3, facecolor='None', edgecolors='blue')

plt.show()

Python 天井関数 (ceiling function) のグラフ

 図を見やすくするために、x が整数値となる座標に ● と ○ を添えてあります。○ はそこで天井関数が値をとらないことを示しています。

math.ceil()

 math.ceil(x) は x 以上の最小の整数を返す 天井関数 です。引数が負のときは 0 に近いほうの整数が返ります。

# PYTHON_CEILING_03

import math

# ceil(1.5)
a = math.ceil(1.5)

# ceil(-4.5)
b = math.ceil(-4.5)

print("ceil(1.5):", a)
print("ceil(-4.5):", b)
ceil(1.5): 2
ceil(-4.5): -4

 

numpy.ceil()

 numpy.ceil() に数値を渡すと、x 以上の最小の整数を返します。引数が負のときは 0 に近いほうの整数を返します。

# PYTHON_CEILING_04

import numpy as np

x = np.array([10.5, -13.5])

# 天井関数
y = np.ceil(x)

print(y)
[11. -13.]

 

床関数

 床関数 (floor function) は、ある実数 $x$ に対して $x$ 以下の最大整数を返します。$\lfloor x \rfloor,\ \mathrm{floor}(x)$ の記号で表します。math モジュールに床関数 math.floor(x) が用意されています。以下に計算例を示します。

# PYTHON_MATH_FLOOR_01

import math

# floor(10)
a = math.floor(10)

# floor(e)
# eはネイピア数 2.718...
b = math.floor(math.e)

# floor(-2.5)
c = math.floor(-2.5)

print("floor(10):", a)
print("floor(e):", b)
print("floor(-2.5):", c)
floor(10): 10
floor(e): 2
floor(-2.5): -3

 この実行結果からわかるように、$\lfloor -2.5 \rfloor$ は $-2$ ではなく、$-3$ であることに注意してください。numpy.floor() 関数を使って床関数をプロットしてみます。

# PYTHON_MATH_FLOOR_02

import numpy as np
import matplotlib.pyplot as plt

# データを作成
xx_1 = np.linspace(-4, 4, 65)
xx_2 = np.arange(-4, 5)
yy_1 = np.floor(xx_1)
yy_2 = np.floor(xx_2)
yy_3 = xx_2 - 1

# 描画エリアの設定
fig, ax = plt.subplots()
ax.grid()
ax.set_title("Floor function", fontsize=16)
ax.set_xlabel("x", fontsize=15)
ax.set_ylabel("floor(x)", fontsize=15)
ax.set_xlim(-4, 4)
ax.set_ylim(-4, 4)

# 床関数をプロット
ax.scatter(xx_1, yy_1, marker="_", c="blue")
ax.scatter(xx_2, yy_2, c="blue")
ax.scatter(xx_2, yy_3, facecolor='None', edgecolors='blue')

plt.show()

Python 床関数 (floor function) のグラフ

math.floor() 床関数

 math.floor(x) は x 以上の最大の整数を返す床関数です。引数が負のときは 0 から遠いほうの整数が返ります。

# PYTHON_FLOOR_03

import math

# floor(3.8)
a = math.floor(3.8)

# floor(-7.6)
b = math.floor(-7.6)

print("floor(3.8):", a)
print("floor(-7.6):", b)
floor(3.8): 3
floor(-7.6): -8

 

numpy.floor()

 numpy.floor() に数値を渡すと、x 以上の最大の整数を返します。引数が負のときは 0 から遠いほうの整数を返します。引数として配列を渡した場合は要素をすべて切り捨てます。

# PYTHON_FLOOR_04

import numpy as np

x = np.array([10.5, -13.5])

# xの各要素の床関数
y = np.floor(x)

print(y)
[10. -14.]

 

整数部を取得する関数

 math.trunc() は渡された数値の小数部分を捨てて、整数部分を取得する関数です。戻り値は必ず整数となります。たとえば 10.0 のような浮動小数点数が渡されると整数 10 が返ります。

# PYTHON_MATH_TRUNC

import math

# 数値の整数部分を取得
a = math.trunc(3.14)
b = math.trunc(-3.14)
c = math.trunc(10.0)

print([a, b, c])
[3, -3, 10]