2009年8月24日月曜日

数学関数

 こじまうすでは今まで浮動小数点を使ってこなかった.今年もつかうつもりはない.

 それはまあどうでもいいとして,少数ながら数学関数を使いたくなることがある.絶対値をとるABS(x)や符号をとるSIGN(x)はマクロで実装している.それ以外ではデッドレコニングなどに三角関数を使うので,sine(x),cosine(x),tangent(x),cotangent(x)の関数を定義している.
sineについてはuradの単位で角度を受け取り,テーブルを参照してsin(x)の1000倍の値を返す.cosineは角度をπ/2ずらしてsineのテーブルを参照.tangentとcotangentはsineとcosineの割り算の結果を返す.

 整数演算だけだと精度の確保とオーバーフローの回避のために掛け算と割り算が計算式の中にたくさんはいってくる.使う単位はなるべくミリやマイクロといった指数が3の倍数となるようにしてバグが埋まるのを回避しているが,それでもたまに桁を1000倍間違ってとんでもない動きをする.

0 件のコメント:

コメントを投稿