stdint.h
(C99)、ブースト/ cstdint.hpp、及びcstdint
(C ++ 0X)ヘッダタイプは、とりわけ、ありますint32_t
。
同様の固定サイズの浮動小数点型はありますか?のようなものfloat32_t
?
stdint.h
(C99)、ブースト/ cstdint.hpp、及びcstdint
(C ++ 0X)ヘッダタイプは、とりわけ、ありますint32_t
。
同様の固定サイズの浮動小数点型はありますか?のようなものfloat32_t
?
sizeof
演算子を使用します。このようなタイプは、アルゴリズムが既知の特定のサイズであることを要求する場合に役立ちます。
sizeof
浮動型のマーシャリングとアンマーシャリングを一貫して行うという問題を解決するには、どうすればよいですか?
回答:
現在、このようなものはCまたはC ++標準には存在しません。実際、float
2進浮動小数点形式になる保証はまったくありません。
一部のコンパイラは、float
タイプがIEEE-754 32ビットバイナリ形式であることを保証します。一部ではありません。実際にfloat
は、ほとんどの非組み込みプラットフォームのIEEE-754 single
タイプですが、より広い形式の式を評価する一部のコンパイラーに関する通常の警告が適用されます。
IEEE-754の2008改訂版のC言語バインディングの追加について議論するワーキンググループがあり、そのようなtypedefを追加することを推奨することを検討できます。これがCに追加された場合、C ++標準がそれに追随すると思います...最終的には。
float
IEEE 32ビットタイプかどうかを知りたい場合は、を確認してくださいstd::numeric_limits<float>::is_iec559
。これはコンパイル時の定数であり、関数ではありません。
より完全なものにしたい場合はstd::numeric_limits<float>::digits
、IEEE標準の倍精度のをこっそり使用していないことも確認してくださいfloat
。24にする必要があります。
になるとlong double
、digits
128ビット(数字= 113)または80ビット(数字= 64)の合理的な2つのIEEE形式があるため、確認することがより重要です。
float32_t
通常は浮動小数点ハードウェアを使用し、可能な場合はソフトウェアの実装に頼らないようにするため、このようにするのは現実的ではありません。
long double
OS X(32ビットおよび64ビットIntel)上の形式は、正確にリトルエンディアン順に格納されているIEEE-754二重拡張フォーマットです。それについてファンキーなことはまったくありません。バイト0〜7は仮数フィールドを保持し、バイト8および9は指数フィールドおよび符号フィールドを保持します。
5.0L
、の仮数があることを覚えておいてくださいa000000000000000
。その不偏指数は+2であり、2倍の拡張指数バイアスは3fff
なので、5.0Lのバイアス指数は4001
です。リトルエンディアンの順序で格納された場合の実際のバイトパターンは00 00 00 00 00 00 00 a0 01 40
であり、これを2つのリトルエンディアンの64ビット整数として表示すると、観察したとおりに表示されます。
4001
リトルエンディアンであると確信してい01 40 00 00 ...
ます。他に何もない場合、最下位バイトが最初に来ます。シーケンスa0 01 40
が数字のどこかに現れると思います(ローテーションのみを実行する場合)が、その理由a0
を説明しておらず01 40
、完全に別々になっているとは思いません。
float32_tやfloat64_tなどのtypedefを使用することが何らかの理由で非現実的であると思われる場合は、使い慣れたOS、コンパイラーに慣れすぎて、小さな巣の外を見ることはできないはずです。
32ビットIEEE浮動小数点演算をネイティブに実行するハードウェアと、64ビットを実行するハードウェアが存在します。時々そのようなシステムは互いに話し合わなければならないことさえあります。その場合、各プラットフォームでdoubleが32ビットか64ビットかを知ることは非常に重要です。32ビットプラットフォームが他の64ビット値に基づいて過度の計算を行う場合、タイミングと速度の要件に応じて、より低い精度にキャストすることができます。
私が自分のプラットフォームにあるビット数を正確に知らない限り、私は個人的にフロートとダブルを使用することに不快に感じます。さらに、これらを通信チャネルを介して別のプラットフォームに転送する場合も同様です。
現在、次のタイプを言語に追加する提案があります。
decimal32
decimal64
decimal128
いつの日かからアクセスできます#include <decimal>
。
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n3871.html