CPU実験室

誰も見向きもしない古いCPUをいじって動かしてみようというプロジェクトです

実数計算テスト

このボードにはFPU:MC68881が載っているのでビルドスクリプトに「-m68881」を追加してFPU用の演算ライブラリを利用できるようにします。
 
includeファイルのmath.hを覗いてみるといろいろな組込み関数が用意されていますが
おそらく一生使わないであろうベッセル関数やガンマ関数といった特殊関数も入っていてせっかくなので動作だけ見てみました。
 
ガンマ関数は階乗の定義域を複素数に拡張した関数で自然数nにおいては
  Γ(n+1)=n!
が成立します。
ただガンマ関数は引数によって値が爆発的に増大するので標準Cライブラリにおける実装はそれの自然対数をとった log|Γ(x)| になっているようです。

 
イメージ 1
 

なのでこのように書いてΓ(1)~Γ(13)で求めると、(14を超えるとlongに収まらないので)
 
 
イメージ 2
 
ちゃんと階乗の値になっています・・・実数計算なので一部誤差ありますが。
もっとも階乗なら教科書的には整数で再帰的に計算するのが普通ですけど。
 
ガンマ関数の引数はもちろん実数も可能で、面白い性質として
   Γ(1/2)=√π
になるとされています。
 
やってみたら・・・なりました。(いつものように小数表現ができないので1,000,000倍しています)
 
イメージ 3