4.2.6.13  
半精度浮動小数点数 【Professional版のみ】 【V1.05.00以降】
 
半精度浮動小数点型(half-precision floating-point type)を使用することができます。
半精度浮動小数点型は次の特徴を持ちます。
| 
- | データの内部表現はIEEE754-2008 のbinary16 に準拠します。 | 
| 
- | 符号部1ビット,指数部5ビット,仮数部10ビット(隠れビットを含む場合は11ビット) | 
| 
- | 指数部のバイアスは0xf(例 1.0は16進数ビット表現での0x3c00) | 
| 
- | 演算は,__fp16型同士の代入,__fp16型からfloat型への変換,float型から__fp16型への変換のみをサポートします。その他の演算は,float型へ変換してから行い,その結果はfloat型に対する同演算と同じ型を持ちます。__fp16型からdouble型への変換も,一度float型に変換してから行います。 | 
| 
- | float型から__fp16型への変換時は非正規化数をサポートせず,丸めモードに従った正規化数にフラッシュします。 | 
| 
- | 丸めモードは-Xround=nearestしかサポートしません。 | 
| 
- | 関数仮引数型,関数返却型に指定できません。__fp16 型の値を関数間で受け渡す場合は,floatなど別の型にキャストして受け渡すか,ポインタで受け渡すか,__fp16型をメンバに持つ構造体引数を使って受け渡します。 | 
| 
- | 呼び出し先に仮引数型が無い場合注,既定の実引数拡張によりfloat型へ変換した後,さらにdouble型に変換してから受け渡します。 | 
| 
注 | プロトタイプ宣言がない,仮引数並びがない,可変個数実引数,のいずれかの場合です。 | 
| 
- | 実引数に指定した場合は,仮引数型に変換してから受け渡します。仮引数型が無い場合,既定の実引数拡張によりfloat型へ変換後,double型に変換してから受け渡します。 | 
| 
- | 構造体メンバ,共用体メンバ,配列要素に指定でます。ビットフィールドメンバには指定できません。 | 
 
| extern __fp16 hpvar1, hpvar2, hpvar3; extern float fvar; extern double dvar; extern int ivar;   /* 外部変数定義 */ __fp16 hpvar = 1.0;   void fun() {  /* 定数代入 */   hpvar = 1.0;     /* __fp16同士の代入 */   hpvar1 = hpvar2;     /* 単精度浮動小数への型変換 */   fvar = hpvar;                                          /* fvar = (float)hpvar; と同義 */     /* 倍精度浮動小数への型変換 */   dvar = hpvar;                                 /* dvar = (double)(float)hpvar; と同義 */     /* 倍精度浮動小数からの型変換 */   hpvar = dvar;                                 /* hpvar = (__fp16)(float)dvar; と同義 */     /* 整数への型変換 */   ivar = hpvar;                                    /* ivar = (int)(float)hpvar; と同義 */     /* 整数からの型変換 */   hpvar = ivar;                                 /* hpvar = (__fp16)(float)ivar; と同義 */     /* 算術演算 */   hpvar3 = hpvar1 + hpvar2;   /* hpvar3 = (__fp16)((float)hpvar1 + (float)hpvar2;) と同義 */ } |