str++;
}
}
+
+ /* If the mantissa is zero, ignore the exponent. */
+ if (!cmp_significand_0 (r))
+ goto underflow;
+
if (*str == 'p' || *str == 'P')
{
bool exp_neg = false;
}
}
+ /* If the mantissa is zero, ignore the exponent. */
+ if (r->cl == rvc_zero)
+ goto underflow;
+
if (*str == 'e' || *str == 'E')
{
bool exp_neg = false;
str++;
if (*str == '0')
{
- if (*++str == 'x')
- str++, base = 16;
+ str++;
+ if (*str == 'x' || *str == 'X')
+ {
+ base = 16;
+ str++;
+ }
else
base = 8;
}
false
};
\f
+/* Encode real R into a single precision DFP value in BUF. */
static void
encode_decimal_single (const struct real_format *fmt ATTRIBUTE_UNUSED,
long *buf ATTRIBUTE_UNUSED,
encode_decimal32 (fmt, buf, r);
}
+/* Decode a single precision DFP value in BUF into a real R. */
static void
decode_decimal_single (const struct real_format *fmt ATTRIBUTE_UNUSED,
REAL_VALUE_TYPE *r ATTRIBUTE_UNUSED,
decode_decimal32 (fmt, r, buf);
}
+/* Encode real R into a double precision DFP value in BUF. */
static void
encode_decimal_double (const struct real_format *fmt ATTRIBUTE_UNUSED,
long *buf ATTRIBUTE_UNUSED,
encode_decimal64 (fmt, buf, r);
}
+/* Decode a double precision DFP value in BUF into a real R. */
static void
decode_decimal_double (const struct real_format *fmt ATTRIBUTE_UNUSED,
REAL_VALUE_TYPE *r ATTRIBUTE_UNUSED,
decode_decimal64 (fmt, r, buf);
}
+/* Encode real R into a quad precision DFP value in BUF. */
static void
encode_decimal_quad (const struct real_format *fmt ATTRIBUTE_UNUSED,
long *buf ATTRIBUTE_UNUSED,
encode_decimal128 (fmt, buf, r);
}
+/* Decode a quad precision DFP value in BUF into a real R. */
static void
decode_decimal_quad (const struct real_format *fmt ATTRIBUTE_UNUSED,
REAL_VALUE_TYPE *r ATTRIBUTE_UNUSED,
decode_decimal128 (fmt, r, buf);
}
-/* Proposed IEEE 754r decimal floating point. */
+/* Single precision decimal floating point (IEEE 754R). */
const struct real_format decimal_single_format =
{
encode_decimal_single,
true
};
+/* Double precision decimal floating point (IEEE 754R). */
const struct real_format decimal_double_format =
{
encode_decimal_double,
true
};
+/* Quad precision decimal floating point (IEEE 754R). */
const struct real_format decimal_quad_format =
{
encode_decimal_quad,
1, /* log10 */
34,
34,
- -6414,
- 6413,
+ -6143,
+ 6144,
127,
127,
true,