広告スペース

第16回 初等関数(math.h)

C言語のmath.hライブラリ。sqrt, sin, cos, powなど数学関数の使い方。

初等関数とは

C言語には、平方根・三角関数・指数関数・対数関数など、数学でおなじみの関数があらかじめ用意されています。これらを使うには #include<math.h> が必要です。
使い方の基本:#include<math.h> を先頭に書く → ② 関数名(引数) で呼び出す → ③ 戻り値は基本的に double
#include<stdio.h>
#include<math.h>  // ← これが必要!

int main(void){
  double x = 2.0;
  printf("sqrt(%.1f) = %f\n", x, sqrt(x));
  return 0;
}
⚠️ コンパイル時の注意: Linux/Mac で gcc を使う場合、gcc prog.c -lm のように -lm オプションが必要なことがあります(math library のリンク)。Visual Studio では不要です。

主な数学関数一覧

すべて #include<math.h> で使えます。引数・戻り値は基本的に double 型。
関数 機能 使用例 結果
sqrt(x)平方根 √xsqrt(9.0)3.0
pow(x, y)べき乗 xypow(2.0, 10.0)1024.0
fabs(x)絶対値 |x|fabs(-3.7)3.7
sin(x)正弦(ラジアン)sin(3.14159/2)1.0
cos(x)余弦(ラジアン)cos(0.0)1.0
tan(x)正接(ラジアン)tan(3.14159/4)≈ 1.0
exp(x)指数関数 exexp(1.0)≈ 2.71828
log(x)自然対数 ln(x)log(2.71828)≈ 1.0
log10(x)常用対数 log10(x)log10(1000.0)3.0
ceil(x)切り上げceil(2.3)3.0
floor(x)切り捨てfloor(2.7)2.0

sqrt ― 平方根を求める

スライドでも最初に登場した関数です。sqrt(x) は x の平方根(√x)を返します。
#include<stdio.h>
#include<math.h>

int main(void){
  double a = 2.0;
  printf("sqrt(%.1f) = %f\n", a, sqrt(a));
  // → sqrt(2.0) = 1.414214

  // 三平方の定理: c = sqrt(a^2 + b^2)
  double b = 3.0, c = 4.0;
  double hyp = sqrt(b*b + c*c);
  printf("斜辺 = %f\n", hyp);
  // → 斜辺 = 5.000000
  return 0;
}
注意:sqrt に負の数を渡すと NaN(Not a Number)が返ります。引数が負でないことを事前にチェックするのが安全です。

三角関数 (sin / cos / tan)

C言語の三角関数は角度ではなくラジアンで指定します。度(°)をラジアンに変換するには rad = deg * M_PI / 180.0 を使います。
sin(θ)
sin(0) = 0
sin(π/2) = 1
sin(π) = 0
cos(θ)
cos(0) = 1
cos(π/2) = 0
cos(π) = -1
tan(θ)
tan(0) = 0
tan(π/4) ≈ 1
tan(π/2) = ∞
#include<math.h>

// 度 → ラジアン変換
double deg = 45.0;
double rad = deg * M_PI / 180.0;

printf("sin(45°) = %f\n", sin(rad)); // → 0.707107
printf("cos(45°) = %f\n", cos(rad)); // → 0.707107
printf("tan(45°) = %f\n", tan(rad)); // → 1.000000
M_PI は math.h で定義されている円周率(3.14159...)の定数です。#define PI 3.14159 のように自分で定義しても構いませんが、M_PI のほうが精度が高いです。

関数電卓 ― 試してみよう

数学関数をブラウザ上で試せます。関数を選んで値を入力すると結果が表示されます。
ここに結果が表示されます

自分で書いてみよう ― 初等関数

三角関数と平方根を使ったプログラムです。直角三角形の斜辺と角度を計算します。
mathfunc.c
出力
「実行」を押してください...
広告スペース

関連する講座

繰り返し・配列・文字列
第17回 乱数の生成
C言語のrand()とsrand()の使い方。乱数の範囲指定・シード・応用例を図解で解説。
入門編
第3回 変数
C言語の変数とは?int, double, charの使い方を図解で解説。
繰り返し・配列・文字列
第14回 繰り返し(for/while)
C言語のfor文とwhile文の使い方。ループ処理を図解で解説。
← 前の講座
第15回 デバッグの技法
次の講座 →
第17回 乱数の生成

確認クイズ

この講座の理解度をチェックしましょう!

Q1. 数学関数を使うために必要なヘッダファイルは?

stdlib.h
math.h
string.h

sqrt, pow, sin, cos などの数学関数は math.h に定義されています。コンパイル時に -lm オプションが必要な場合もあります。

Q2. pow(2, 3) の結果は?

6
8
9

pow(2, 3) は 2の3乗 = 8 を返します。pow 関数は double 型の値を返します。

Q3. sqrt(16) の結果は?

4.0
8.0
256.0

sqrt は平方根を返す関数です。√16 = 4.0 です。

この記事をシェア
X(Twitter)でシェア Facebookでシェア LINEで送る はてブ

この講座の理解を深めるおすすめ書籍

サイトで動きを理解し、書籍で演習量を補うと効果的です

📘
苦しんで覚えるC言語
MMGames 著
初心者向けの定番入門書。丁寧な解説で基礎を固められます。
Amazonで見る
📗
新・明解C言語 入門編
柴田望洋 著
図解が豊富で、演習問題も充実。大学の教科書としても採用多数。
Amazonで見る
📙
プログラミング言語C 第2版
B.W.カーニハン, D.M.リッチー 著
通称K&R。C言語の原典。基礎を終えた後のステップアップに最適。
Amazonで見る

※ 上記リンクはアフィリエイトリンクです。購入によりサイト運営を支援いただけます。