SPARC64X 和 SPARC64X+ 支持十进制浮点数据类型和运算。数据格式符合 IEEE 754-2008 中定义的 64 位 DPD。编译器提供了用于处理数据的类型和多个函数。
要表示十进制浮点数,请在 dpd_conf.h 中声明 _Decimal64 内部函数类型。您必须在使用该类型之前包括头文件,如以下示例所示:
#include <dpd_conf.h> int main(void) { _Decimal64 dd; ... return 0; }
_Decimal64 类型
可使用类型修饰符进行修改:const 和/或 volatile。
可使用存储类说明符进行指定:auto、static、register、extern 和/或 typedef。
可以是聚集的元素:array、struct 和/或 union。
_Decimal64 类型变量
可以是函数的正式参数。
可以是函数调用的实际参数。
可以是函数的返回值。
可以是赋值操作符 "=" 的 lhs 或 rhs。
可以是地址运算符 "&" 的操作数。
可以是 sizeof 运算符的操作数。
可以是 typeof 运算符的操作数。
会为其他运算(例如,算术、比较或类型转换)提供内部函数。
_Decimal64 的文本字符串语法不受支持。请改用类型转换的内部函数。
_Decimal64 类型数据与 64 位二进制浮点数的内存对齐相同。
指定 -xarch=[sparcace|sparcaceplus] 和 -m64 时,__DEC_FP_INTR 宏定义为 1。该宏在确定编译器是否支持十进制浮点内部函数功能时非常有用。
包括 dpd_conf.h 时,IEEE 754-2008 所需的 DEC_EVAL_METHOD 宏定义为 1。
__STDC_DEC_FP__ 宏并未定义,因为该编译器不完全支持 ISO/IEC TR 24732 中所述的功能。
IEEE 754-2008 所需的 #pragma FLOAT_CONST_DECIMAL_64 不受支持。
dpd_conf.h 中声明了下面所列的内部函数。它们在处理 _Decimal64 类型的变量时非常有用。
此函数将 src 存储到由 addr 寻址的内存中。addr 必须在 8 字节边界上对齐,否则无论 -xmemalign 设置为何都不会定义行为。
该函数将从由 addr 寻址的内存中加载 _Decimal64 类型的值并返回该值。addr 必须在 8 字节边界上对齐,否则无论 -xmemalign 设置为何都不会定义行为。
该函数将添加 src1 和 src2 并返回结果。根据 IEEE 754-2008 标准抛出浮点异常。
此函数将从 src1 中减去 src2 并返回结果。根据 IEEE 754-2008 标准抛出浮点异常。
该函数将 src1 和 src2 相乘并返回结果。根据 IEEE 754-2008 标准抛出浮点异常。
此函数将用 src1 除以 src2 并返回结果。根据 IEEE 754-2008 标准抛出浮点异常。
此函数将计算 src 的绝对值并返回结果。即使 src 发出 NaN 信号,也不会抛出浮点异常。
此函数将保留 src 的符号并返回结果。即使 src 发出 NaN 信号,也不会抛出浮点异常。
src1 等于 src2 时,此函数会返回非 0 值,否则将返回 0。对 NaN、Inf 和负零值的处理符合 IEEE 754-2008。
src1 不等于 src2 时,此函数返回非 0 值,否则返回 0。对 NaN、Inf 和负零值的处理符合 IEEE 754-2008。
src1 大于 src2 时,此函数返回非 0 值,否则返回 0。对 NaN、Inf 和负零值的处理符合 IEEE 754-2008。
src1 大于或等于 src2 时,此函数返回非 0 值,否则返回 0。对 NaN、Inf 和负零值的处理符合 IEEE 754-2008。
src1 小于 src2 时,此函数返回非 0 值,否则返回 0。对 NaN、Inf 和负零值的处理符合 IEEE 754-2008。
src1 小于或等于 src2 时,该函数返回非 0 值,否则返回 0。对 NaN、Inf 和负零值的处理符合 IEEE 754-2008。
此函数将 src 中的 64 位带符号整数值转换为十进制浮点值并返回结果。
此函数将 src 中的 64 位无符号整数值转换为十进制浮点值并返回结果。
此函数将 src 中的二进制浮点值转换为十进制浮点值并返回结果。
此函数将 src 中的十进制浮点值转换为 64 位带符号整数值并返回结果。
此函数会将 src 中的十进制浮点值转换为 64 位无符号整数值并返回结果。
此函数将 src 中的十进制浮点值转换为二进制浮点值并返回结果。
此函数检索 _Decimal64 的当前舍入模式。该值在 dpd_conf.h 中进行定义,如下所示:
舍入到最接近的,偶数优先
舍入到零
舍入到正无穷大
舍入到负无穷大
舍入到最接近的,远离零
_Decimal64 的舍入模式的初始值为 __DPD_ROUND_NEAREST。请注意,-fround 选项不改变 _Decimal64 的舍入模式。
此函数会将 _Decimal64 的舍入模式设置为 r。r 应为上面所列的值之一。它在成功时返回 0,在失败时返回非 0。