で満たされた NEON レジスタがありfloat32ます。メインCPUに戻すことなく、最も近い整数に丸めたいと思います。に変換する NEON 命令はfloat32単純uint32に切り捨てられるため、たとえば、 ではなく に39.7なります。どのように処理されるかについてはあまり気にしません。ゼロから丸めたり、丸めたりして、両方が機能します。39400.5
丸めを実装するために私が見ることができる最良の方法は、
- に変換し
int32ます (したがって、切り捨てます) - に戻す_
float32 - に 1 を足して
int32に戻しfloat32、切り上げる場合に備えて取っておきます - 減算
- と比較し
0.5ます(私の場合、それらはすべて正になることがわかっているため、絶対値は必要ありません) - 比較結果に基づいて truncated または truncated + 1 を選択します
それは醜く、遅く、複雑に思えます。
よりクリーンで、より速く、よりシンプルで、より健全な方法はありますか?