ホーム ] PC技術/システム技術 ] VB.NETプログラミング ] なるほどナレッジ ] インフォメーション ]

上へ
平方根
立方根
整数指数
実数指数(Exp)
実数指数(一般)
対数
正弦/余弦
正接
逆正弦/逆余弦
逆正接
双曲線正弦/余弦
双曲線正接
逆双曲線正弦
階乗評価関数
級数評価関数
演算時間評価関数

数学関数

双曲線正接

最終更新日:2006/06/05

●概要

 とりあえず、双曲線正接も用意する。

●級数

  ・tanh X = Σ (-1)k-1・Tk・X(2*k-1) /(2 * k - 1)!  [k = 0 to ∞]

 である。Tk はベルヌーイ数から算出される正接係数。残念ながら、これは複雑過ぎるので、級数から求めない方が良さそう。

●方法検討

 級数がだめなら、定義式から求めることになる。

○直接

 tanh X = (eX - e-X) / (eX + e-X)

であるが、まともに計算するとExp を二回することになるので、以下のように変形する。分母、分子を、eX 倍し、変形すると、

 (e2X - 1) / (e2X + 1) = (e2X + 1 - 1 - 1) / (e2X + 1)
= 1 - 2 /(e2X + 1)

となる。これで、1回のExp で済む。

 ところで、上式では、X < 0 の場合、e2X の演算で、逆数がでるので、今度は、e-X 倍し、変形すると、

 (e2X - 1) / (e2X + 1) =2 / (e-2X + 1) - 1

を得る。X < 0 の場合は、この式で計算する。

 但し、いずれも、|X| ≪ 1 のとき、e±2X ≒ 1 となり(下図参照)、整数 - [1] の計算による桁落ちが生じる。


 上図は、小さなXに対する、e2X の値を算出し、整数 1 との差を取ったものである(明白であるが、実証主義の筆者は確認した。)。いずれも精度は64桁としている。X欄は、X の次数である。初期値は、3.3333333 である。演算結果は、64桁以下は切り捨てられ丸め誤差が生じる。図では、-66以降で、e2X は破綻している(1 になってしまっている)。演算精度をP とすれば、変数の次数が-P 以下で、破綻することになる。

 これを避けるために、次の方法を取る。

○sinh 法

 cosh2 X - sinh2 X = 1 であるから、両辺を、sinh2 X で割って変形すると、

 1/ tanh2 X - 1 = 1/ sinh2 X

∴tanh X = sinh X / sqrt( 1 + sinh2 X)

となる。