Oracle® Solaris Studio 12.4: C ユーザーガイド

印刷ビューの終了

更新: 2014 年 12 月
 
 

2.19.2 10 進浮動小数点の組み込み関数

SPARC64X および SPARC64X+ は、10 進浮動小数点のデータ型および演算をサポートします。データフォーマットは、IEEE 754-2008 に定義されている 64 ビット DPD に準拠します。コンパイラは、データを処理するための型およびさまざまな関数を提供します。

2.19.2.1 型と演算

10 進浮動小数点数を表すために、_Decimal64 組み込み型が dpd_conf.h 内で宣言されます。次の例に示す型を使用する前に、ヘッダーファイルをインクルードする必要があります。

#include <dpd_conf.h>
int main(void) {
  _Decimal64 dd;
  ...
  return 0;
}

_Decimal64

  • 型修飾子 const または volatile、あるいはその両方で変更できます。

  • ストレージクラス指定子 autostaticregisterextern、および typedef あるいはこれらのいずれかで指定できます。

  • 集合 arraystruct、および union あるいはこれらのいずれかの要素とすることができます。

_Decimal64 型変数

  • 関数の仮パラメータとなることができます。

  • 関数呼び出しの実引数となることができます。

  • 関数の戻り値となることができます。

  • 代入演算子「=」の左辺または右辺となることができます。

  • アドレス演算子「&」のオペランドとなることができます。

  • sizeof 演算子のオペランドとなることができます。

  • typeof 演算子のオペランドとなることができます。

組み込み関数は、算術、比較、型の変換などのほかの操作に対して提供されます。

_Decimal64 用のリテラル構文はサポートされていません。型変換用の組み込み関数を代わりに使用できます。

_Decimal64 型のデータのメモリー境界整列は、64 ビットのバイナリ浮動小数点数と同じです。

2.19.2.2 マクロおよびプラグマ

-xarch=[sparcace|sparcaceplus] および -m64 が指定された場合、__DEC_FP_INTR マクロは 1 に定義されます。このマクロは、コンパイラが 10 進浮動小数点組み込み関数をサポートするかどうかを判別する場合に役立ちます。

dpd_conf.h がインクルードされたとき、IEEE 754-2008 で必要な DEC_EVAL_METHOD マクロは 1 に定義されます。

コンパイラは ISO/IEC TR 24732 に記載されている機能を完全にサポートするわけではないため、__STDC_DEC_FP__ マクロは定義されません。

IEEE 754-2008 で必要な #pragma FLOAT_CONST_DECIMAL_64 はサポートされません

2.19.2.3 組み込み関数

以下の一覧に示す組み込み関数は、dpd_conf.h で宣言されます。これらは _Decimal64 型の変数を操作する場合に便利です。

void __dpd64_store(const _Decimal64 src, _Decimal64 * const addr)

この関数は、addr によってアドレス指定されるメモリーに src を保管します。addr は 8 バイト境界に整列されている必要があり、そうでない場合は -xmemalign 設定に関係なく動作は未定義になります。

_Decimal64 __dpd64_load(const _Decimal64 * const addr)

この関数は、addr によってアドレス指定されるメモリーから _Decimal64 型の値をロードし、これを返します。addr は 8 バイト境界に整列されている必要があり、そうでない場合は -xmemalign 設定に関係なく動作は未定義になります。

_Decimal64 __dpd64_add(_Decimal64 src1, _Decimal64 src2)

この関数は、src1src2 を加算して結果を返します。IEEE 754-2008 規格に従って、浮動小数点例外がスローされます。

_Decimal64 __dpd64_sub(_Decimal64 src1, _Decimal64 src2)

この関数は、src1 から src2 を減算して結果を返します。IEEE 754-2008 規格に従って、浮動小数点例外がスローされます。

_Decimal64 __dpd64_mul(_Decimal64 src1, _Decimal64 src2)

この関数は、src1src2 を乗算して結果を返します。IEEE 754-2008 規格に従って、浮動小数点例外がスローされます。

_Decimal64 __dpd64_div(_Decimal64 src1, _Decimal64 src2)

この関数は、src1src2 で除算して結果を返します。IEEE 754-2008 規格に従って、浮動小数点例外がスローされます。

_Decimal64 __dpd64_abs(_Decimal64 src)

この関数は、src の絶対値を計算して結果を返します。src から NaN のシグナルが生成される場合でも、浮動小数点例外はスローされません。

_Decimal64 __dpd64_neg(_Decimal64 src)

この関数は、src の符号を逆にして結果を返します。src から NaN のシグナルが生成される場合でも、浮動小数点例外はスローされません。

int __dpd64_cmpeq(_Decimal64 src1, _Decimal64 src2)

この関数は、src1src2 に等しいときは非 0 を返し、そうでない場合は 0 を返します。NaN、Inf、および負の符号が付いたゼロの処理は、IEEE 754-2008 に準拠します。

int __dpd64_cmpne(_Decimal64 src1, _Decimal64 src2)

この関数は、src1src2 に等しくないときは非 0 を返し、そうでない場合は 0 を返します。NaN、Inf、および負の符号が付いたゼロの処理は、IEEE 754-2008 に準拠します。

int __dpd64_cmpgt(_Decimal64 src1, _Decimal64 src2)

この関数は、src1src2 より大きいときは非 0 を返し、そうでない場合は 0 を返します。NaN、Inf、および負の符号が付いたゼロの処理は、IEEE 754-2008 に準拠します。

int __dpd64_cmpge(_Decimal64 src1, _Decimal64 src2)

この関数は、src1src2 より大きいか等しいときは非 0 を返し、そうでない場合は 0 を返します。NaN、Inf、および負の符号が付いたゼロの処理は、IEEE 754-2008 に準拠します。

int __dpd64_cmplt(_Decimal64 src1, _Decimal64 src2)

この関数は、src1src2 より小さいときは非 0 を返し、そうでない場合は 0 を返します。NaN、Inf、および負の符号が付いたゼロの処理は、IEEE 754-2008 に準拠します。

int __dpd64_cmple(_Decimal64 src1, _Decimal64 src2)

この関数は、src1src2 より小さいか等しいときは非 0 を返し、そうでない場合は 0 を返します。NaN、Inf、および負の符号が付いたゼロの処理は、IEEE 754-2008 に準拠します。

_Decimal64 __dpd64_convert_from_int64(int64_t src)

この関数は、src 内の 64 ビット符号付き整数値を 10 進浮動小数点値に変換して結果を返します。

_Decimal64 __dpd64_convert_from_uint64(uint64_t src)

この関数は、src 内の 64 ビット符号なし整数値を 10 進浮動小数点値に変換して結果を返します。

_Decimal64 __dpd64_convert_from_double(double src)

この関数は、src 内の 2 進浮動小数点値を 10 進浮動小数点値に変換して結果を返します。

int64_t __dpd64_convert_to_int64(_Decimal64 src)

この関数は、src 内の 10 進浮動小数点値を 64 ビット符号付き整数値に変換して結果を返します。

uint64_t __dpd64_convert_to_uint64(_Decimal64 src)

この関数は、src 内の 10 進浮動小数点値を 64 ビット符号なし整数値に変換して結果を返します。

double __dpd64_convert_to_double(_Decimal64 src)

この関数は、src 内の 10 進浮動小数点値を 2 進浮動小数点値に変換して結果を返します。

int __dpd_getround(void)

この関数は、_Decimal64 の現在の丸めモードを取得します。この値は、次のように dpd_conf.h 内で定義されます。

__DPD_ROUND_NEAREST

最近接偶数に丸めます

__DPD_ROUND_TOZERO

ゼロの方向に丸めます

__DPD_ROUND_POSITIVE

正の無限の方向に丸めます

__DPD_ROUND_NEGATIVE

負の無限の方向に丸めます

__DPD_ROUND_NEARESTFROMZERO

絶対値で四捨五入して最近接値へ丸めます

_Decimal64 の丸めモードの初期値は __DPD_ROUND_NEAREST です。-fround オプションは、_Decimal64 の丸めモードを変更しないことに注意してください。

int __dpd_setround(int r)

この関数は、_Decimal64 の丸めモードを r に設定します。r は上記に示されているものである必要があります。成功時は 0、失敗時は非 0 を返します。