1 /* { dg-options "-O0" } */ 2 3 /* N1150 5.2 Conversions among decimal floating types and between 4 decimal floating types and generic floating types. 5 C99 6.3.1.5(3) New. 6 7 Test various conversions involving decimal floating types. */ 8 9 #ifndef __STDC_WANT_DEC_FP__ 10 #define __STDC_WANT_DEC_FP__ 1 11 #endif 12 13 #include "dfp-dbg.h" 14 #include <float.h> 15 16 volatile _Decimal32 d32; 17 volatile _Decimal64 d64; 18 volatile _Decimal128 d128; 19 20 int main()21main () 22 { 23 /* Conversions to larger types. */ 24 d32 = 123.4df; 25 d64 = d32; 26 if (d64 != 123.4dd) 27 FAILURE 28 d128 = d32; 29 if (d128 != 123.4dl) 30 FAILURE 31 d64 = 345.678dd; 32 d128 = d64; 33 if (d128 != 345.678dl) 34 FAILURE 35 36 /* Conversions to smaller types for which the value fits. */ 37 d64 = 3456.789dd; 38 d32 = d64; 39 if (d32 != 3456.789df) 40 FAILURE 41 d128 = 123.4567dl; 42 d32 = d128; 43 if (d32 != 123.4567df) 44 FAILURE 45 46 d128 = 1234567890.123456dl; 47 d64 = d128; 48 if (d64 != 1234567890.123456dd) 49 FAILURE 50 51 /* Test demotion to non-representable decimal floating type. */ 52 53 /* Assumes a default rounding mode of 'near'. This uses the rules 54 describe in the 27 July 2005 draft of IEEE 754r, which are much 55 more clear that what's described in draft 5 of N1107. */ 56 57 /* Rounds to what _Decimal32 can handle. */ 58 d64 = 9.99999949E96DD; 59 d32 = d64; 60 if (d32 != DEC32_MAX) 61 FAILURE 62 63 /* Rounds to more than _Decimal32 can handle. */ 64 d64 = 9.9999995E96DD; 65 d32 = d64; 66 if (d32 != __builtin_infd32()) 67 FAILURE 68 69 /* Rounds to what _Decimal32 can handle. */ 70 d128 = 9.99999949E96DD; 71 d32 = d128; 72 if (d32 != DEC32_MAX) 73 FAILURE 74 75 /* Rounds to more than _Decimal32 can handle. */ 76 d128= 9.9999995E96DD; 77 d32 = d128; 78 if (d32 != __builtin_infd32()) 79 FAILURE 80 81 /* Rounds to what _Decimal64 can handle. */ 82 d128 = 9.99999999999999949E384DL; 83 d64 = d128; 84 if (d64 != DEC64_MAX) 85 FAILURE 86 87 /* Rounds to more than _Decimal64 can handle. */ 88 d128 = 9.9999999999999995E384DL; 89 d64 = d128; 90 if (d64 != __builtin_infd64()) 91 FAILURE 92 93 FINISH 94 } 95