免責事項: これは趣味で開発するためのものです。依頼されない限り、プロの仕事でこれほど過剰に設計することはありません。
線 (1D)、グリッド/円 (2D)、立方体/球 (3D) などの N 次元サーフェスを想像してください。このサーフェスの各軸は、始点と終点があるという点で有限です。包み込みます。良い例は地球で、経度 (ラップアラウンド)、緯度 (始点と終点)、必要に応じて高さと時間 (特定の始点/終点を想定) があります。
このシナリオを処理するための一般化された構造は、次のようになります。
typedef NoAxis End;
typedef Axis<End>::NoWrap<0, 365> Time; // one year, if units are in days
typedef Axis<Time>::NoWrap<0, 35000> Height; // sea level to 35k meters
typedef Axis<Height>::NoWrap<-90, 90> Latitude;
typedef Axis<Latitude>::Wrap<-180, 180> Longitude;
「Axis」クラスは、次の軸であるテンプレート パラメータを受け取ります。これは軸のチェーンを形成し、特別なタイプ「NoAxis」がチェーンを開始します。2 点間の距離の検出などの幾何学的操作は、各軸の計算を累積することによって実行されます。
私の質問:できればテンプレートのメタプログラミングを介して、各軸の極値に乗算できる最大の桁数をプログラムで見つける方法はありますか-表面解像度を最大化するという考えですが、使用するタイプのストレージをオーバーフローさせません値を格納します (たとえば、32 ビット システムで 32 ビットをオーバーフローさせないでください)。この大きさのオーダーは、サーフェス上のポイント間の距離の計算を考慮に入れる必要があります。これには、距離の 2 乗を求めることが含まれます。
繰り返しになりますが、この桁数を見つける理由は、特定のストレージ タイプで可能な限り最高の解像度を得るためです。