を使用しunsigned char
て 8 つのフラグを格納しています。各フラグは立方体の角を表します。したがって00000001
、コーナー101000100
はコーナー3と7などになります。私の現在の解決策は&
、1、2、4、8、16、32、64、および128の結果に対するもので、結果がゼロでないかどうかを確認し、コーナーを保存します。つまり、if (result & 1) corners.push_back(1);
. その「if」ステートメントを取り除くことができる可能性はありますか? ビット単位の演算子でそれを取り除くことができることを望んでいましたが、何も考えられませんでした。
if ステートメントを削除したい理由について少し背景を説明します。この立方体実際には、サイズが少なくとも 512x512x512 のグリッドの一部であるボクセルです。これは 1 億 3,400 万を超えるボクセルです。ボクセルのそれぞれに対して計算を実行しています (厳密には正確ではありませんが、ここでは関係がないため詳細には触れません)。これは大量の計算です。そして、フレームごとにこれらの計算を実行する必要があります。関数呼び出しごとのわずかな速度向上は、これらの量の計算に役立ちます。アイデアを提供するために、私のアルゴリズムは(ある時点で)フロートが負、正、またはゼロであるかどうかを(何らかのエラー内で)判断する必要がありました。そこにifステートメントがあり、チェックよりも大きい/小さい。これを int 関数への高速フロートに置き換え、4 分の 1 秒短縮しました。現在、128x128x128 グリッドの各フレームには 4 秒強かかります。