Pythonで数学の計算をする時、電卓を使ったり、複雑な式を自分で書いたりしていませんか?
実は、Pythonには「mathモジュール」という便利な機能があり、これを使うと数学計算がとても簡単になります。
平方根、三角関数、対数計算など、中学・高校で習う数学から、大学レベルの高度な計算まで、mathモジュールがあれば簡単にできてしまいます。
プログラミング初心者でも、数学が苦手な人でも、このモジュールを使えば複雑な計算が一行で済みます。
この記事では、mathモジュールに含まれる関数と定数を、具体例と一緒にわかりやすく紹介します。
mathモジュールってなに?

数学計算専用の便利な道具箱
mathモジュールは、Pythonに最初から入っている「数学計算専用の関数と定数の集まり」です。
普通なら複雑な計算式を書かないといけない数学の処理が、たった一行で済むようになります。
例えば、16の平方根を計算したい時:
- 手計算:「16の平方根は…4だ!」
- 電卓:「√16を押して…4」
- Python(mathモジュール):
math.sqrt(16)
→ 4.0
このように、プログラムの中で簡単に数学計算ができるようになります。
mathモジュールを使う準備
mathモジュールを使う前に、必ず最初に「インポート」という作業が必要です。
基本的な使い方
import math
# これで、math.関数名() の形で使えるようになります
print(math.sqrt(16)) # 4.0(16の平方根)
print(math.pi) # 3.141592653589793(円周率)
よく使う関数だけインポートする方法
from math import sqrt, pi
# math.を付けなくても使えます
print(sqrt(16)) # 4.0
print(pi) # 3.141592653589793
どちらの方法でも使えますが、最初はimport math
の方法がわかりやすくておすすめです。
では、mathモジュールにどんな便利な機能があるか、詳しく見ていきましょう。
数値を整える関数(数値操作関数)
小数を整数にする関数
プログラムで計算していると、「小数を整数にしたい」という場面がよくあります。mathモジュールには、いろいろな方法で小数を整数に変換する関数があります。
ceil(x):切り上げ
import math
print(math.ceil(3.1)) # 4(3.1以上の最小の整数)
print(math.ceil(3.9)) # 4
print(math.ceil(-2.1)) # -2(負の数は0に近い方向)
# 実用例:必要なページ数を計算
total_items = 23
items_per_page = 10
pages_needed = math.ceil(total_items / items_per_page)
print(f"必要なページ数: {pages_needed}") # 3ページ
floor(x):切り捨て
print(math.floor(3.1)) # 3(3.1以下の最大の整数)
print(math.floor(3.9)) # 3
print(math.floor(-2.1)) # -3(負の数は0から遠い方向)
# 実用例:年齢を計算
days_lived = 7500
age = math.floor(days_lived / 365)
print(f"年齢: 約{age}歳") # 約20歳
trunc(x):整数部分だけ取り出し
print(math.trunc(3.9)) # 3(小数点以下を切り捨て)
print(math.trunc(-3.9)) # -3(符号はそのまま)
# 実用例:時間と分を分ける
total_minutes = 90.5
hours = math.trunc(total_minutes / 60)
minutes = total_minutes % 60
print(f"{hours}時間{minutes}分") # 1時間30.5分
絶対値と符号の操作
fabs(x):絶対値
print(math.fabs(-5.7)) # 5.7
print(math.fabs(3.2)) # 3.2
# 実用例:温度の差を計算
temp1 = 25.5
temp2 = 18.3
difference = math.fabs(temp1 - temp2)
print(f"温度差: {difference}度") # 7.2度
copysign(x, y):符号をコピー
print(math.copysign(5, -1)) # -5.0(5の絶対値に-1の符号)
print(math.copysign(-3, 2)) # 3.0(3の絶対値に2の符号)
# 実用例:プレイヤーの向きを設定
speed = 5
direction = -1 # 左向き
velocity = math.copysign(speed, direction)
print(f"速度: {velocity}") # -5.0
便利な数学計算
factorial(x):階乗
print(math.factorial(5)) # 120(5! = 5×4×3×2×1)
print(math.factorial(0)) # 1(0! = 1)
# 実用例:組み合わせの計算で使用
# 5人の中から3人を選ぶ場合の数
# C(5,3) = 5! / (3! × 2!)
n = 5
k = 3
combinations = math.factorial(n) // (math.factorial(k) * math.factorial(n-k))
print(f"組み合わせの数: {combinations}") # 10
gcd(x, y):最大公約数
print(math.gcd(12, 18)) # 6
print(math.gcd(15, 25)) # 5
# 実用例:分数を約分
numerator = 12
denominator = 18
common_divisor = math.gcd(numerator, denominator)
simplified_num = numerator // common_divisor
simplified_den = denominator // common_divisor
print(f"{numerator}/{denominator} = {simplified_num}/{simplified_den}") # 12/18 = 2/3
数値を整える関数は、日常的なプログラムでよく使います。次は、もう少し高度な数学計算を見てみましょう。
指数・対数関数で高度な計算
指数関数(べき乗の計算)
指数関数は、「ある数を何回かけるか」という計算です。複利計算や人口増加の予測などでよく使われます。
exp(x):ネイピア数のx乗
print(math.exp(1)) # 2.718281828459045(e^1 = e)
print(math.exp(0)) # 1.0(e^0 = 1)
print(math.exp(2)) # 7.38905609893065(e^2)
# 実用例:複利計算の基礎
principal = 100000 # 元本10万円
rate = 0.05 # 年利5%
time = 3 # 3年
# 連続複利の場合
amount = principal * math.exp(rate * time)
print(f"3年後の金額: {amount:.0f}円") # 約116,183円
pow(x, y):xのy乗
print(math.pow(2, 3)) # 8.0(2の3乗)
print(math.pow(4, 0.5)) # 2.0(4の0.5乗 = 平方根)
# 実用例:面積から一辺の長さを計算
area = 25 # 正方形の面積
side = math.pow(area, 0.5) # 平方根
print(f"一辺の長さ: {side}cm") # 5.0cm
sqrt(x):平方根
print(math.sqrt(16)) # 4.0
print(math.sqrt(2)) # 1.4142135623730951
# 実用例:ピタゴラスの定理
a = 3 # 直角三角形の一辺
b = 4 # もう一辺
c = math.sqrt(a**2 + b**2) # 斜辺
print(f"斜辺の長さ: {c}") # 5.0
対数関数(指数の逆計算)
対数は「何乗すれば、その数になるか」を求める計算です。データ分析や音楽、地震の計算などで使われます。
log(x, base):対数計算
print(math.log(8, 2)) # 3.0(2の何乗が8か → 2^3 = 8)
print(math.log(100, 10)) # 2.0(10の何乗が100か → 10^2 = 100)
print(math.log(math.e)) # 1.0(自然対数:eの何乗がeか → e^1 = e)
# 実用例:音の大きさ(デシベル)計算
power1 = 1 # 基準の音の強さ
power2 = 100 # 比較する音の強さ
decibels = 10 * math.log(power2 / power1, 10)
print(f"音の大きさ: {decibels}dB") # 20dB
log10(x)、log2(x):よく使われる対数
print(math.log10(1000)) # 3.0(1000 = 10^3)
print(math.log2(1024)) # 10.0(1024 = 2^10)
# 実用例:コンピュータのメモリサイズ
memory_bytes = 1024 * 1024 * 1024 # 1GB
memory_power = math.log2(memory_bytes)
print(f"2の{memory_power:.0f}乗バイト") # 2の30乗バイト
指数・対数関数は最初は難しく感じるかもしれませんが、科学計算やデータ分析では欠かせない機能です。次は、身近な三角関数を見てみましょう。
三角関数で角度と距離の計算

基本的な三角関数
三角関数は、角度から座標を計算したり、波の形を作ったりする時に使います。ゲーム開発、アニメーション、音楽制作などでよく使われます。
sin(x)、cos(x)、tan(x):基本の三角関数
import math
# 注意:Pythonの三角関数はラジアン単位です
angle_degrees = 30 # 30度
angle_radians = math.radians(angle_degrees) # ラジアンに変換
print(f"sin(30°) = {math.sin(angle_radians):.3f}") # 0.500
print(f"cos(30°) = {math.cos(angle_radians):.3f}") # 0.866
print(f"tan(30°) = {math.tan(angle_radians):.3f}") # 0.577
# 実用例:円周上の点の座標を計算
radius = 10 # 半径10の円
angle = 45 # 45度
x = radius * math.cos(math.radians(angle))
y = radius * math.sin(math.radians(angle))
print(f"座標: ({x:.2f}, {y:.2f})") # (7.07, 7.07)
角度の変換関数
# 度 ↔ ラジアンの変換
degrees = 90
radians = math.radians(degrees)
print(f"{degrees}度 = {radians:.3f}ラジアン") # 90度 = 1.571ラジアン
radians = math.pi / 4
degrees = math.degrees(radians)
print(f"{radians:.3f}ラジアン = {degrees}度") # 0.785ラジアン = 45度
逆三角関数(角度を求める)
座標から角度を計算したい時に使います。
asin(x)、acos(x)、atan(x):逆三角関数
# 正弦値から角度を求める
sin_value = 0.5
angle_radians = math.asin(sin_value)
angle_degrees = math.degrees(angle_radians)
print(f"sin値が0.5の角度: {angle_degrees}度") # 30度
# 実用例:斜面の角度を計算
height = 3 # 高さ
length = 5 # 斜辺の長さ
angle = math.degrees(math.asin(height / length))
print(f"斜面の角度: {angle:.1f}度") # 36.9度
atan2(y, x):座標から角度を求める
# 原点から点(x, y)への角度を計算
x = 3
y = 4
angle_radians = math.atan2(y, x)
angle_degrees = math.degrees(angle_radians)
print(f"角度: {angle_degrees:.1f}度") # 53.1度
# 実用例:キャラクターが敵の方向を向く
player_x, player_y = 0, 0
enemy_x, enemy_y = 10, 10
direction = math.atan2(enemy_y - player_y, enemy_x - player_x)
direction_degrees = math.degrees(direction)
print(f"敵の方向: {direction_degrees:.1f}度") # 45.0度
実用的な三角関数の活用例
円運動のアニメーション
import math
def circle_position(time, radius=5, speed=1):
"""時間に応じて円周上の位置を計算"""
angle = speed * time
x = radius * math.cos(angle)
y = radius * math.sin(angle)
return x, y
# 時間0秒から5秒まで、0.5秒ごとの位置
for t in range(0, 11):
time = t * 0.5
x, y = circle_position(time)
print(f"時間{time}秒: ({x:.2f}, {y:.2f})")
波の計算
def wave_height(x, amplitude=2, frequency=1):
"""正弦波の高さを計算"""
return amplitude * math.sin(frequency * x)
# x = 0 から 2π まで、波の高さを計算
for i in range(13):
x = i * math.pi / 6 # 30度ずつ
height = wave_height(x)
print(f"x={x:.2f}: 高さ={height:.2f}")
三角関数は、角度や円に関する計算では欠かせません。次は、mathモジュールに用意されている便利な定数を見てみましょう。
便利な数学定数
よく使われる数学定数
mathモジュールには、数学でよく使われる定数があらかじめ用意されています。自分で値を入力する必要がないので、とても便利です。
pi:円周率
print(math.pi) # 3.141592653589793
# 実用例:円の面積と周囲を計算
radius = 5
area = math.pi * radius**2
circumference = 2 * math.pi * radius
print(f"半径{radius}cmの円:")
print(f"面積: {area:.2f}cm²") # 78.54cm²
print(f"周囲: {circumference:.2f}cm") # 31.42cm
e:ネイピア数(自然対数の底)
print(math.e) # 2.718281828459045
# 実用例:自然増加の計算
initial_population = 1000
growth_rate = 0.1 # 10%増加
time = 2 # 2年
final_population = initial_population * (math.e ** (growth_rate * time))
print(f"2年後の人口: {final_population:.0f}人") # 1221人
tau:2π
print(math.tau) # 6.283185307179586
# 実用例:完全な円(360度)をラジアンで表す
full_circle = math.tau
half_circle = math.tau / 2
quarter_circle = math.tau / 4
print(f"360度 = {full_circle:.3f}ラジアン") # 6.283ラジアン
print(f"180度 = {half_circle:.3f}ラジアン") # 3.142ラジアン
print(f"90度 = {quarter_circle:.3f}ラジアン") # 1.571ラジアン
特殊な値
inf:無限大
print(math.inf) # inf
print(math.inf > 1000000) # True
# 実用例:最小値を探す時の初期値
def find_minimum(numbers):
min_value = math.inf # 最初は無限大
for num in numbers:
if num < min_value:
min_value = num
return min_value
numbers = [5, 2, 8, 1, 9]
print(f"最小値: {find_minimum(numbers)}") # 1
nan:非数(Not a Number)
print(math.nan) # nan
print(math.isnan(math.nan)) # True
# 実用例:無効な計算結果をチェック
def safe_divide(a, b):
if b == 0:
return math.nan
return a / b
result = safe_divide(10, 0)
if math.isnan(result):
print("計算できませんでした")
else:
print(f"結果: {result}")
定数を使った実用的な計算例
球の体積計算
def sphere_volume(radius):
"""球の体積を計算"""
return (4/3) * math.pi * radius**3
radius = 3
volume = sphere_volume(radius)
print(f"半径{radius}cmの球の体積: {volume:.2f}cm³") # 113.10cm³
振り子の周期計算
def pendulum_period(length, gravity=9.81):
"""振り子の周期を計算"""
return 2 * math.pi * math.sqrt(length / gravity)
length = 1 # 1メートル
period = pendulum_period(length)
print(f"長さ{length}mの振り子の周期: {period:.2f}秒") # 2.01秒
数学定数を使うことで、正確で読みやすい計算ができるようになります。最後に、mathモジュールの便利な組み合わせ関数を紹介します。
その他の便利な関数

組み合わせ・順列の計算
数学の確率や統計でよく使われる、組み合わせと順列の計算ができます。
comb(n, k):組み合わせ
# 5人の中から3人を選ぶ組み合わせ
combinations = math.comb(5, 3)
print(f"5人から3人を選ぶ組み合わせ: {combinations}通り") # 10通り
# 実用例:チーム編成
players = 10
team_size = 5
possible_teams = math.comb(players, team_size)
print(f"{players}人から{team_size}人のチームを作る方法: {possible_teams}通り") # 252通り
perm(n, k):順列
# 5人の中から3人を順番に選ぶ順列
permutations = math.perm(5, 3)
print(f"5人から3人を順番に選ぶ順列: {permutations}通り") # 60通り
# 実用例:表彰台の組み合わせ
runners = 8
podium = 3
possible_podiums = math.perm(runners, podium)
print(f"{runners}人の中から1位〜3位を決める方法: {possible_podiums}通り") # 336通り
精密な計算
fsum(iterable):高精度の合計
# 普通の合計だと誤差が出る場合
numbers = [0.1] * 10
normal_sum = sum(numbers)
precise_sum = math.fsum(numbers)
print(f"通常の合計: {normal_sum}") # 0.9999999999999999
print(f"高精度の合計: {precise_sum}") # 1.0
# 実用例:お金の計算
prices = [19.99, 5.99, 12.50, 3.99]
total = math.fsum(prices)
print(f"合計金額: {total}円") # 42.47円
prod(iterable):積の計算
# リストの全要素の積を計算
numbers = [2, 3, 4, 5]
product = math.prod(numbers)
print(f"{numbers}の積: {product}") # 120
# 実用例:確率の計算
success_rates = [0.8, 0.9, 0.95] # 各段階の成功率
total_success_rate = math.prod(success_rates)
print(f"全体の成功率: {total_success_rate:.3f}") # 0.684 (68.4%)
数値の分解と操作
modf(x):小数部分と整数部分を分ける
number = 123.456
fractional, integer = math.modf(number)
print(f"元の数: {number}")
print(f"小数部分: {fractional}") # 0.456
print(f"整数部分: {integer}") # 123.0
# 実用例:時間の表示
total_hours = 5.75
hours, minutes_decimal = math.modf(total_hours)
minutes = minutes_decimal * 60
print(f"{total_hours}時間 = {int(hours)}時間{int(minutes)}分") # 5時間45分
isqrt(n):整数の平方根
# 平方根の整数部分だけが欲しい場合
number = 50
int_sqrt = math.isqrt(number)
print(f"{number}の整数平方根: {int_sqrt}") # 7
# 実用例:正方形に並べられる最大数
items = 63
max_per_side = math.isqrt(items)
total_in_square = max_per_side ** 2
remaining = items - total_in_square
print(f"{items}個のアイテムを正方形に並べると:")
print(f"{max_per_side}×{max_per_side} = {total_in_square}個、余り{remaining}個")
まとめ
Pythonのmathモジュールは、プログラミングで数学計算を行う時の強力な味方です。複雑な数式を覚える必要がなく、簡単な関数呼び出しで高度な計算ができます。
覚えておきたい主要な機能
日常的によく使う関数
math.sqrt(x)
:平方根の計算math.ceil(x)
、math.floor(x)
:切り上げ・切り捨てmath.fabs(x)
:絶対値math.pow(x, y)
:べき乗計算
三角関数と角度変換
math.sin(x)
、math.cos(x)
、math.tan(x)
:三角関数math.radians(x)
、math.degrees(x)
:角度変換math.atan2(y, x)
:座標から角度を計算
便利な定数
math.pi
:円周率math.e
:ネイピア数math.inf
:無限大
高精度計算
math.fsum()
:誤差の少ない合計math.prod()
:積の計算
使用時の注意点
ラジアンと度の違い Pythonの三角関数はラジアン単位です。度で計算したい場合は、math.radians()
で変換しましょう。
適切な関数の選択
- 整数が欲しい場合:
math.floor()
、math.ceil()
- 高精度が必要な場合:
math.fsum()
- 大きな数の計算:適切なデータ型の選択
コメント