C 言語で使える数学関数

このページは、1997 年度の情報処理演習で升谷先生が作成された教材を元に作 成されてます。
以下は、C言語の標準ライブラリに含まれる数学関数の一覧です。 ただし △はこの演習の範囲外なので使いません。 以下の関数を1つでも使う場合には,必ず, ということをしなければなりません。
戻る

sqrt( x )
x の平方根(SQuare RooT)を求めます。ただし x ≧ 0.0 という 実数でなければなりません。
 
#include <stdio.h>
#include <math.h>

int 
main( void )
{
    double x, y;
    
    x = 2.0;
    y = sqrt( x );
    printf( "%f の平方根は %f です\n", x, y );
    return 0;
}

fmod( x, y )
x / y の剰余.x を y で割ったときの余り(Float MODulo)を求める 関数の実数バージョンです。
 
#include <stdio.h>
#include <math.h>

int 
main( void )
{
    double x, y, z;

    x = 15.6;
    y = 4.2;	
    z = fmod( x, y );
    printf( "%f を %f で割った余りは %f です\n", x, y, z );
    return 0;
}

pow( x, y )
x の y 乗 (POWer)を求めます。
 
#include <stdio.h>
#include <math.h>

int 
main( void )
{
    double x, y, z;

    x = 5.0;
    y = 3.0;	
    z = pow( x, y );
    printf( "%f の %f 乗は %f です\n", x, y, z );
    return 0;
}

modf( x, y )
x の小数部を返し,ポインタ y の差す場所に整数部を入れる.△

ldexp(x, y)
x・(2のy乗) を求める返す. ただし y は整数でなければならない.
 
#include <stdio.h>
#include <math.h>

int 
main( void )
{
    double x, z;
    int y;

    x = 5.0;
    y = 3;
    z = ldexp( x, y );
    printf( "%f * 2^%d は %f です。 ", x, y, z );
    return 0;
}

log(x)
x の自然対数(LOGarithm) (底はe).ただし x > 0.0 でなければならない
 
#include <stdio.h>
#include <math.h>

int 
main( void )
{
    double x, y;

    x = 15.0;
    y = log( x );
    printf( "%f の自然対数は %f です。", x, y );
    return 0;
}

log10(x)
x の常用対数(LOGaritm 10) (底は10.0).x > 0.0
 
#include <stdio.h>
#include <math.h>

int 
main( void )
{
    double x, y;

    x = 4.0;
    y = log10( x );
    printf( "%f の 常用対数は %f です。\n", x, y );
    return 0;
}

frexp(x, y)
xの正規化分数を返し,ポインタyの差す場所に2の累乗数を入れる.△

■fabs(x)■
x の絶対値(Float ABSolute)を求めます。
 
#include <stdio.h>
#include <math.h>

int 
main( void )
{
    double x, y;

    x = -5.6;
    y = fabs( x );
    printf( "%f の絶対値は %f です。\n", x, y );
    return 0;
}

ceil( x ) および floor( x )
ceil( x ) は x 以上の最小の整数を求めます。要は切り上げです。
floor( x ) は x 以下の最小の整数を求めます。これは切り捨てです。
 
#include <stdio.h>
#include <math.h>

int 
main( void )
{
    double x, y;

    x = 4.3;	
    y = ceil( x );
    printf( "%f を切り上げると %f になります。", x, y );
    y = floor( x );
    printf( "%f を切り捨てると %f になります。", x, y );
    return 0;
}

sin( x ), cos( x ), および tan( x )
sin(x) は x の正弦(SINe)を求めます。
cos(x) は x の余弦(COSine)を求めます。
tan(x) は x の正接(TANgent)を求めます。
x の単位はラジアンで、解釈されます。
 
#include <stdio.h>
#include <math.h>
#deifne PI 3.141592

int 
main( void )
{
    double x, y;

    x = 0.3 * pi;
    y = sin( x );
    printf( "%f [rad] の正弦は %f です。\n", x, y );
    y = cos( x );
    printf( "%f [rad] の余弦は %f です。\n", x, y );
    y = tan( x );
    printf( "%f [rad] の正接は %f です。\n", x, y );
    return 0;
}

asin(x)
正弦の逆関数(Arc SINe). 関数の答は単位は[-π/2, π/2]ラジアンの範囲.
x は -1 ≦ x ≦ +1 を満たさないといけない
 
#include <stdio.h>
#include <math.h>
#define PI 3.141592

int 
main( void )
{
    double x, y;
    x = 0.3 * PI;

    y = sin( x );  
    printf( "%f [rad] の正弦は %f です。\n", x, y );    
    x = asin( y );
    printf( "%f の逆正弦は %f [rad] です。", y, x );
    return 0;
}

acos(x)
余弦の逆関数(Arc COSine).返ってくる答は [0, π] ラジアンの範囲.
x は -1 ≦ x ≦ +1 を満たさないといけない。
#include <stdio.h>
#include <math.h>
#define PI 3.141592

int ]
main( void )
{
    double x, y;

    x = 0.3 * PI;

    y = cos( x );  
    printf( "%f [rad] の余弦は %f です。\n", x, y );    
    x = acos( y );
    printf( "%f の逆余弦は %f [rad] です。", y, x );
    return 0;
}

atan( z ), および atan2( y, x )
正接の逆関数(Arc TANgent)。返ってくる答の範囲が違う。
ベクトル ( x, y ) が原点となす角度を返す。ただし z = y/x とする。
atan( z ) が返す答の範囲は [-π/2, π/2] ラジアンの範囲にある。
atan2( y, x ) が返す答の範囲は [-π, π] ラジアンの範囲にある。
atan() は 答がπだけずれていることに注意
 
#include <stdio.h>
#include <math.h>
#define PI 3.141592

int 
main( void )
{
    double x, y, z, c, s;

    x = 0.8 * pi;

    s = sin( x );
    c = cos( x );
    z = s / c;      /* ← tan(x) = sin(x) / cos(x) と同じ*/
    printf( "%f [rad] の正接は %f です。\n", x, z );

    y = atan( z );
    printf( "%f [rad] の逆正接(atan()による)は %f です\n", z, y );

    y = atan2( s, c );
    printf( "%f [rad] の逆正接(atan2()による)は %f です\n", z, y );
    return 0;
}

sinh(x), cosh(x) および cosh(x)
x の双曲正弦(Hypabolic SINe). ( exp( x ) - exp( -x ) ) / 2.0
x の双曲余弦(Hypabolic COSine). ( exp( x ) + exp( -x ) ) / 2.0
x の双曲正接(Hypabolic COSine). sinh( x ) / cosh( x )


戻る
このページへのお問い合わせは君塚( kimizuka[atmark]me.es.osaka-u.ac.jp)まで

$Last Updated: Sep 25 2008 $