サイトマップ / C言語講座出入り口総目次目次:数学の関数>双曲線関数

青い直線

双曲線関数

青い直線

[三角関数と逆三角関数]←このソース→[フェルマーの最終定理]

/* 双曲線関数

今日は双曲線関数を扱う標準ライブラリ関数について学びます。

    #include <math.h>
    double sinh(double x);
    double cosh(double x);
    double tanh(double x);
関数 x の 範 囲 戻  り  値
sinh(x) 成功した場合
xが大きすぎて失敗した場合
ハイパボリックサイン
無限大(errnoにERANGEがセットされる)

cosh(x)

成功した場合
xが大きすぎて失敗した場合
ハイパボリックコサイン
無限大(errnoにERANGEがセットされる)
tanh(x) ハイパボリックタンジェント

双曲線関数と指数関数の間には、下記に示す関係があります。指数関数は標準ライブラリ関数にあります。

    sinh(x) = (exp(x) - exp(-x)) / 2
    cosh(x) = (exp(x) + exp(-x)) / 2
    tanh(x) = sinh(x) / cosh(x)
    #include <math.h>
    double exp(double x);

    例:y = exp(x);

    戻り値
    成功した場合:eのx乗
    失敗した場合:xが大きすぎて失敗した場合 無限大(errnoにERANGEをセット)

ソースプログラムの説明

ソースプログラム中のprintf( )文中の書式指定子%g。下記の指定子は浮動小数点数に以下に示す変換をします。

    %g %G %Lg %LG は、
    桁数に応じて浮動小数点か指数で表します。

    Gは指数のeを大文字で、
    gは小文字で表します。

ソースプログラム中のperror( )はエラーがおきた時、エラーメッセージを表示します。

    #include <stdio.h>
    void perror(const char *s);

    例:perror(s);

    実行結果
    エラーが起きた時sとエラーメッセージを
    標準エラー出力に出力

*/

/* ここからソースプログラム */

#include <stdio.h>
#include <math.h>        /* sinh(  ) cosh(  ) tanh(  ) に必要 */
#include <errno.h>       /* errno を使うため必要 */
void main(void);

void main(void)
{
    double x, y;

    printf("角度を入力して下さい\t");
    scanf("%lf", &x);

    errno = 0;        /* errno を0に初期化 */
    y = sinh(x);
    if (errno)        /* もし errno が0でないなら */
        perror("Invalid Argument for sinh(  )");
    else
        printf("\nsinh(x) = %lg", y);

    errno = 0;        /* errno を再度0に初期化 */
    y = cosh(x);
    if (errno)        /* もし errno が0でないなら */
        perror("Invalid Argument for sinh(  )");
    else
        printf("\ncosh(x) = %lg", y);

    printf("\ntanh(x) = %lg",  tanh(x));

}

/* ここまでソースプログラム */

/* 実行結果はいかがでしたか。x の値を増加させていくと、sinh(x)とcosh(x)の値が近づいて来て、ある限度を超えると等しくなります。

    sinh(x) = (exp(x) - exp(-x)) / 2
    cosh(x) = (exp(x) + exp(-x)) / 2

なので、xの値が大きくなるとexp(-x)が非常に小さくなるためです。

しかし、数学的にはxが無限大でなければ、sinh(x)とcosh(x)は等しくありません。コンソールに表示される値は近似値です。double型どうしの演算では近似値になることがあります。

そこで、

    if ( x == y ) は常に成り立たず
    if ( x != 0 ) は常に成り立つ

という事態もあり得ます。そこで、

    dx = 0.000001;

    if ((x >= y - dx) && (x <= y + dx))
    if (!( x > - dx && x < dx))

としなければ期待通り動作しないこともあり得ます。 */

[三角関数と逆三角関数]←このソース→[フェルマーの最終定理]

青い直線

/* (C) 2000- YFプロ. All Rights Reserved. */    提供:C言語講座−それ自体コンパイルできる教材を使った講座です−

青い直線

サイトマップ / C言語講座出入り口総目次目次:数学の関数>双曲線関数