サイトマップ / 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言語講座−それ自体コンパイルできる教材を使った講座です−