2012-05-07 5 views
2

私はXcode(Objective-C)にいます。なぜ私は短いフロートを持っていないのですか?

short floatを使用できないのはなぜですか?エラー'short float' is invalidが表示されます。

+0

意味がありません。フロートは(通常)IEEE 754として実装されていますが、これは「短い」値には意味がありません。 –

+5

@ RichardJ.RossIII実際には16ビットのみのIEEE 754の「半精度」モードがあります。 – mkb

答えて

3

あなたはこのようなビットフィールドを使用して短いフロートを実現することができます。

typedef struct shortFloat { 
    char sign : 1; 
    char exponent : 5; 
    short significand : 10; 
} shortFloat; 

shortFloat shortFloat_add(shortFloat s1, shortFloat s2); 
shortFloat shortFloat_sub(shortFloat s1, shortFloat s2); 
shortFloat shortFloat_mul(shortFloat s1, shortFloat s2); 
shortFloat shortFloat_div(shortFloat s1, shortFloat s2); 

しかし、その後、あなたはあなた自身の浮動小数点演算を記述する必要があります。

また、ARMターゲット(。INC iPhone)に、あなたはここでGCCのドキュメントを読んで、半精度浮動小数点値を持つことができます:http://gcc.gnu.org/onlinedocs/gcc/Half_002dPrecision.html

+0

これはアセンブリで浮動小数点命令を利用するつもりはないでしょうか?私は計算中に浮動小数点にマーシャリングして、マシンが計算したいと思う方法を決定させ、後でそれを16ビットに非整列化することができると思います。 – Dmitry

0

私はC言語でショートフロートを見たことがありません。

short intがありますが、short floatはリチャードが指摘したように意味がありません。

3

shortlongは整数のためのものである、フロートの等価はhalfであり、 double。しかし、halfは目的関数-Cでは使用できません(プロセッサには半分の長さの浮動小数点を扱うための命令がありません)が、GLSLのようないくつかのGPU言語で見つけることができます。

関連する問題