まあ、これは最適化の問題ではありません。
私は(今のところ)いくつかの位置の平均を見つける必要がある単純なLinuxカーネルモジュールを書いています。これらの位置は、浮動小数点(つまりfloat
)変数として格納されます。(私はすべての作者なので、それを変更することはできますが、フロートの精度を維持し、回避できる場合はそれに関与しないようにします)。
現在、これらの位置の値は、単に保存するためにカーネルに保存されます(または少なくとも使用されます)。1つのユーザーアプリケーションがこれらのデータを書き込み(共有メモリを介して(私はRTAIを使用しているので、カーネルとユーザースペース間で共有メモリを使用しています))、他のアプリケーションはそこから読み取ります。float変数からの読み取りと書き込みはFPUを使用しないので、これは安全だと思います。
安全とは、カーネルでFPUを回避することを意味します。言うまでもなく、一部のシステムにはFPUさえありません。kernel_fpu_begin / endを使用するつもりはありません。これは、タスクのリアルタイム性を損なう可能性があるためです。
カーネルモジュールでは、(位置はとにかく平均化されているので)実際にはそれほど精度は必要ありませんが、0.001までは必要です。私の質問は、FPUを使用せずに、浮動小数点数を整数(元の数の1000倍)に移植可能に変換するにはどうすればよいですか?
フロートのビットパターンから手動で数値を抽出することを考えましたが、エンディアンがどのように影響するかわからないため、またはすべてのアーキテクチャのフローティングポイントが標準である場合でも、それが良いアイデアかどうかはわかりません。