ごとけんです

In message "[ruby-list:8648] sin(complex)"
    on 98/07/08, toyofuku / juice.or.jp <toyofuku / juice.or.jp> writes:
>  豊福@パパイヤです。

>>   complex ** complex は正しいような気がします。
>> sin と cos は両方とも虚数部の符号が逆のような気がするの
>> ですがどうやって確認したものか。
>
>  やっと http://www.rkmath.rikkyo.ac.jp/~kida/ubasic.htm
>から UBASIC を落としてきて確認しました。

UBASIC で検算ってのもなんか本質的ではないので ^^;;
L.V.アルフォースの教科書「複素解析」(現代数学社)で定義だけ
調べてみました。数学の表記法を使って書きます。

まず複素数 z について exp(z) とは単に微分方程式

  f(z) = f'(z),  初期値 f(0) = 1

の解の表記法です(存在は証明される)。また、exp(z) が指数法則

  exp(a+b) = exp(a)exp(b)

を満たすことは微分の性質と上の微分方程式だけから分かります。
# 複素解析では先に代数則と収束と微分と解析関数が定義されます。

これを使って、 sin(z) と cos(z) は

  sin(z) = (exp(iz) - exp(-iz)) / 2i
  cos(z) = (exp(iz) + exp(-iz)) / 2

で定義されます。これからオイラーの公式 
  
  exp(iz)= cos z + i sin(z) 

が導かれます。
# 複素平面のような幾何を一切用いないで済むとこがポイント。
# 偏角も exp の逆関数 log の虚部として幾何学的でない定義を
# 与えられる。

ここまでは複素数一般のはなしですが、
上の sin, cos, の定義とオイラーの公式、指数法則、
そして双曲型三角関数 

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

および、

  ii = -1
  1/i = iiii/i = iii = -i

を使うと libm で演算できる実装が求まります。
んが、時間がなくなったのでここまで (__;

-- gotoken