On 02/07/2017 11:59 AM, Laurent Vivier wrote:
+static long double floatx80_to_ldouble(floatx80 val)
+{
+ if (floatx80_is_infinity(val)) {
+ if (floatx80_is_neg(val)) {
+ return -__builtin_infl();
+ }
+ return __builtin_infl();
+ }
+ if (floatx80_is_any_nan(val)) {
+ char low[20];
+ sprintf(low, "0x%016"PRIx64, val.low);
+
+ return nanl(low);
+ }
+
+ return *(long double *)&val;
+}
This doesn't work except for x86 host.
You ought to extract the mantissa, convert the 64-bit value to long-double, and
use ldexpl to scale the result for the exponent.
Similarly converting the other way use frexpl and ldexpl.
r~