フロートが4バイトになるようにするためのクロスアーキテクチャの方法が必要です(32ビットウィンドウの場合と同様)。たとえば、私が作成している構造体では、4バイト長の整数値を確保する__int32
代わりにを使用しています。int
フロートでこれを行うにはどうすればよいですか?__int32
値を型に置き換えるだけでよいことはわかっています。ただし、64ビットシステムでフロートにキャストする場合、問題は発生しませんか?
フロートが4バイトになるようにするためのクロスアーキテクチャの方法が必要です(32ビットウィンドウの場合と同様)。たとえば、私が作成している構造体では、4バイト長の整数値を確保する__int32
代わりにを使用しています。int
フロートでこれを行うにはどうすればよいですか?__int32
値を型に置き換えるだけでよいことはわかっています。ただし、64ビットシステムでフロートにキャストする場合、問題は発生しませんか?
フロートが4バイトになるようにクロスアーキテクチャの方法が必要です
int32_t
浮動小数点値に類似したものはありません。
必要なことを達成するための唯一のクロスプラットフォームの方法は、ランタイムまたは静的アサートのいずれかを使用してテストすることです。
#include <cassert>
int main () {
assert(sizeof(float) == 4);
// If control reaches this line, then you've
// ensured that float is 4 bytes.
// rest of your program goes here
}
浮動小数点のデータサイズはCPUに関連付けられているため、これを行うための標準に準拠した方法はありません。標準(私の知る限り、浮動小数点をサポートするすべてのIEEE-754
プロセッサが使用します)は、単精度浮動小数点値を4バイトとして定義しています。
標準的な言及がない理由は、Cの作成者は、標準が変更または更新された場合に、浮動小数点の特定の実装に縛られたくないためです。また、CPUが単精度および倍精度浮動小数点数のサイズと実装を決定するため、コンパイラーが関係することではありません。
あなたがそれについて心配しているなら、あなたはそれstatic_assert
を確実にするためにaを使うことができますsizeof(float) == 4
; しかし、これは私が想像できないような問題ではありません。もしそうなら、ケースバイケースで対処する必要があります(これは実際にはアーキテクチャごとになります)。