いくつかのオーディオフィンガープリンティングコードを浮動小数点から固定小数点に変換しなければならないとき、私は数年前にこの道を辿りました。難しい部分は、DCT(大きなコサインテーブルを使用)と高精度の対数です。私は驚いたことに、既存の図書館の方法ではほとんど見つかりませんでした。それ以来、私は元のソニープレイステーション(PS1)に浮動小数点サポートがないと聞いています。そのために開発フォーラム(fori?)がまだ存在すれば、あなたが探しているものを持っているかもしれません。
NewMatライブラリでは幸いですが、三角法ではなく線形代数に対応していますが、浮動小数点数に焦点を当てているようです。それでも、そのサイトはthis listになります。これはチェックアウトの価値があるようです。また、固定小数点サポートに適している可能性のある信号処理ライブラリであるspucが見つかりました。そして数年前、私はフラウンホーファーからシグナルプロセッシングテンプレートライブラリー(sptl)を見ました。私はそれが独占的だったと思っていますが、何らかの形で利用可能かもしれません。
あなたがすでに持っているものにかなり近いと思います。正弦関数を持つので、入力を適切に変換すれば、基本的にコサイン関数も得られます(cos(x) == sin(x + pi/2)
)。正接はサインとコサイン(tan(x) = sin(x)/cos(x)
)の商であるため、基本的には三角法があります。
ベクターに関しては、STLアルゴリズムとSTLベクトルとvalarrayクラスを組み合わせても、かなり近づくことはありませんか?そうでない場合は、常にBoostのmath librariesがあります。
申し訳ありません私はあなたが探している銀色の弾丸を指摘できませんが、あなたがやろうとしていることは、これらの日はむしろ珍しいです。精度を求めている人は、通常、浮動小数点に直進します。これは、現代のプロセッサではまともな性能を備えており、多くのライブラリをサポートしています。リソースが制約されたハードウェアでスピードを望む人は、通常、精度が必要ではなく、ベクトルによってトリグを実行していないし、おそらくC++も行っていないでしょう。私はあなたの最善の選択肢はあなた自身のロールをとることだと思います。それを再考するのではなく、新しいコンテキストでホイールデザインパターンを適用するものと考えるようにしてください。 :)
それはどのように罪の近似ですか? – TonyK
私は正直に分かりません。私は1年前に、浮遊点罪近似に基づいて、私が推測すると、いくつかの放物線関数を使って書いた。それを整数にまとめると、上記の結果が得られました。元の機能を忘れてしまったので、もうどのように動作するのか分かりません。しかし、それはほぼ完全な円を描く。 – porgarmingduod
ああ、私は今それを見る。範囲の各半分を0と2のゼロと最大/最小値+/- 1の放物線として近似します。ニース! – TonyK