質問

私は、キャストすることでデータが失われ、どのように機能するかを理解しようとします。したがって、次の例では、データの損失があるかどうか、そしてなぜなのかを理解しようとします。i - int(4),f - float(4),d-double(8))

i == (int)(float) i; // sizeof(int)==sizeof(float) <- no loss
i == (int)(double) i; // sizeof(int)!=sizeof(double) <- possible loss
f == (float)(double) f;// sizeof(double)!=sizeof(float) <- possible loss
d == (float) d;// sizeof(double)!=sizeof(float) <- possible loss

タイプサイズのみに基づいて答えを基にするだけで十分ですか?(+ラウンド)

役に立ちましたか?

解決

32ビットINTと通常の4および8バイトIEEE-754フロート/ダブルを想定してください。

i == (int)(float) i;     // possible loss (32 -> 23 -> 32 bits)
i == (int)(double) i;    // no loss (32 -> 52 -> 32 bits)
f == (float)(double) f;  // no loss (23 -> 52 -> 23 bits)
d == (float) d;          // possible loss (52 -> 23 -> 52 bits)

INTには32ビットの精度があり、フロートには23ビット、ダブルには52ビットがあります。

他のヒント

タイプの変数を保存するために割り当てられたメモリは、データの損失を考慮する唯一の事実ではありません。一般に、丸めの方法とCPUがオーバーフローの場合に数値データを処理する方法は、検討したい他の側面になります。

なぜなら sizeof メモリ内の同じサイズを報告しても、データの損失があるという意味ではありません。

0.5を考慮してください。

それをフロートに保存できますが、整数に保存することはできません。

したがって、データの損失。

つまり、そのケーキの0.5が欲しいです。それを整数として表すことはできません。何もないかたくさんのケーキを手に入れましょう。ヤム

なぜ整数?たとえば、整数番号のみが必要な場合があるため ID_num

なぜフロート?実際の例で作業する必要があるかもしれないから % calculations

なぜダブル?フロートサイズに収まらない実数があるとき

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top