とりあえず、符号部1bit、整数部16bit、小数部15bitの固定小数ライブラリがほぼ完成しました。固定小数同士の四則演算以外に、double型との四則演算を定義しておきました。こうしておくことでdouble型に暗黙的にキャストされる全ての型の四則演算が実現できます。
が、パフォーマンスを考えると整数はInt32を用意しておいたほうがいい気がする。コンパイラが最適化してくれることを期待してもいいけれど、double型にキャストされちゃったら利かない気がするしなぁ。
とりあえず値型で作成して、感覚としても一般の定義型と同じように扱えるハズ。まぁちゃんとWAVEファイルを扱いやすいように整数を固定小数として保持するメソッドも作ったし。
後は実際に組み込んでみて、誤差がどの程度出てくるのかを調べなきゃなぁ。本来なら誤差もある程度予測できるはずだけれど、あいにくその計算方法をよく知らない(ぁ これまた勉強しとかなきゃな^^; う〜ん、16bitのWAVEファイルを読み込んだとして、その値をそのまま小数部として扱ってはいるのだけれど・・・、値が小さくなればなるほど有効桁数が追いつかないから精度が怪しくなるよなぁ。やっぱ小数部の桁数もっと増やすか・・・。ぶっちゃけ整数部に16bitも必要ないと思うしなぁ。たたみ込みでどの程度値が大きくなるかやけど・・・、利得を1にしておけばそこまで大きくはならない・・・かな?
とりあえず、正しい四則演算結果を返すようにはできたから次は符号部を1bit、整数部11bit、小数部20bitって振り分けくらいにしてみるかな。ん〜、この場合かけ算実行したあと何bit右にシフトしたらいいんだ・・・? それに桁あふれが起きそうだしな・・・。そこは気をつけておかないと。桁あふれ起こすと負の数になるっけ・・・? それは困るからなぁ。確かラウンドチェックはC#にあったよな・・・要チェックだ。
あ、作ってから気付いた。これC#で作っちゃったよ・・・。C++で作るつもりだったが・・・、まぁいいか。実用レベルになってからC++に移植しよう。移植はまーそこまで手間かからんだろう。演算子をオーバーライドしたから「+=」とか「-=」の追加はあるけど^^; まーなくても動く(ぁ
とりあえず、明日も頑張るってことだ!
0 件のコメント:
コメントを投稿