質問: 皆さんは8,16bitのマイコンにある程度の正確さと速さを求められる数値計算をさせたいとき、どのような変数型を使っていますか? short(16bit)やchar(8bit)などの整数型を使って計算させると、簡単にオーバーフローしてしまうと思うのですが、どうすればよいのでしょうか? 16bitマイコン(PIC24FJ64GA002)を使ってリアルタイムで高速フーリエ変換をさせたいと思い、この問題を解決するために16bitの固定小数点数(整数部7bit,小数部8bit,符号1bit)をC言語のソースコードで実装し、計算させてみたのですが、FFTの点数が512程度になってくるとやはりオーバーフローを起こしてしまいます。 固定小数点数に限界を感じたので、浮動小数点数を使いたいと思ったのですが、floatやdoubleなどの浮動小数点数は32bit以上の変数です。8bitや16bitのマイコンでも使えますが、これが最適なのでしょうか? そこに疑問を感じて、16bitの浮動小数点数(仮数部10bit,指数部5bit,符号1bit)をソースコードで実装しようと、プログラムを作ろうと思ったのですが、私には骨の折れる作業なので、これが意味のあることなのか不安になって質問させていただきました。 今私が作ろうとしているものは、音楽用の簡易な観賞用のリアルタイムスペアナです。 よろしくおねがいします。 ### 発生している問題・エラーメッセージ double, floatが使えない場合に数値計算がしたいとき、どのような変数型を使えばよいのか ### 試したこと ソースコードによる固定小数点数の実装。
回答: 質問の方向性とは違う回答になりますが、音楽用スペアナなら専用ICを使って作ると楽なはずなので、どうしてもFFTで作りたいという事情がなければそっちをおすすめします。 オーディオ用7バンドスペクトラムアナライザ-用IC MSGEQ7P: 半導体 秋月電子通商 電子部品 ネット通販 このICを使った作例は検索すれば出てくるので、模倣すれば基本的には行けると思います。 データシートのブロック図を見ると、このICと同等の機能のものを自作するのもそんなに難しくはなさそうです(バンドパスフィルタのはんだ付けが骨かもしれませんが)。微妙に機能に満足できない・・・なら挑戦してみるのも楽しいかもしれません。