floats
ゲーム内の位置を表すために使用しています:
struct Position
{
float x;
float y;
};
これが最良の選択であるかどうか、そしてポジションの値が大きくなり続けるにつれてどのような結果になるか疑問に思っています. フロートの保管方法をブラッシュアップするのに時間がかかり、少し混乱していることに気付きました。
(Microsoft Visual C++ コンパイラを使用しています。)
ではfloat.h
、FLT_MAX
次のように定義されています。
#define FLT_MAX 3.402823466e+38F /* max value */
です340282346600000000000000000000000000000
。
UINT_MAX
その値は、次のように定義されている値よりもはるかに大きくなります。
#define UINT_MAX 0xffffffff
値 に対応します4294967295
。
これに基づいてfloat
、位置のような非常に大きな数を格納するのは良い選択だと思われます。非常に大きいですFLT_MAX
が、精度の問題がどのように発生するのか疑問に思っています。
私の理解に基づいて、afloat
は符号を格納するために 1 ビットを使用し、指数を格納するために 8 ビットを使用し、仮数を格納するために 23 ビットを使用します (先行する 1 が想定されます)。
S EEEEEEEE MMMMMMMMMMMMMMMMMMMMMMM
つまりFLT_MAX
、次のようになります。
0 11111111 11111111111111111111111
これは次のようになります:
1.11111111111111111111111 x 2^128
また
111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
これを知っていても、精度の低下を視覚化するのに苦労し、値が増加し続けるとどうなるかを考えて混乱しています.
これを考える簡単な方法はありますか?floats
またはdoubles
一般に、のようなものに非常に大きな数を格納するために使用されunsigned int
ますか?