===================================================================
@@ -49,18 +49,19 @@ program test_qp
if (str4 /= "1.41421356237309504876") call abort()
case (16)
- if (str1 /= " 1.00000000000000000000000000000000000") call abort()
- if (str2 /= "1.00000000000000000000000000000000000") call abort()
-
if (digits(1.0_qp) == 113) then
! IEEE 754 binary 128 format
! e.g. libquadmath/__float128 on i686/x86_64/ia64
+ if (str1 /= " 1.00000000000000000000000000000000000") call abort()
+ if (str2 /= "1.00000000000000000000000000000000000") call abort()
if (str3 /= " 1.41421356237309504880168872420969798") call abort()
if (str4 /= "1.41421356237309504880168872420969798") call abort()
else if (digits(1.0_qp) == 106) then
! IBM binary 128 format
- if (str3(1:37) /= " 1.41421356237309504880168872420969") call abort()
- if (str4(1:34) /= "1.41421356237309504880168872420969") call abort()
+ if (str1 /= " 1.0000000000000000000000000000000") call abort()
+ if (str2 /= "1.0000000000000000000000000000000") call abort()
+ if (str3(1:37) /= " 1.4142135623730950488016887242097") call abort()
+ if (str4(1:34) /= "1.4142135623730950488016887242097") call abort()
end if
! Do a libm run-time test
===================================================================
@@ -1405,9 +1405,16 @@ set_fnode_default (st_parameter_dt *dtp, fnode *f,
f->u.real.e = 4;
break;
case 16:
+ /* Adjust decimal precision depending on binary precision, 103 or 113. */
+#if GFC_REAL_16_DIGITS == 113
f->u.real.w = 45;
f->u.real.d = 36;
f->u.real.e = 4;
+#else
+ f->u.real.w = 41;
+ f->u.real.d = 32;
+ f->u.real.e = 4;
+#endif
break;
default:
internal_error (&dtp->common, "bad real kind");