1/* { dg-options "-O2" } */ 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(4) Conversions, arithmetic operands, real floating types. */ 6 7#include "dfp-dbg.h" 8 9_Decimal32 d32; 10_Decimal64 d64; 11_Decimal128 d128; 12float sf; 13double df; 14long double tf; 15 16extern void link_error (void); 17 18int 19main () 20{ 21 /* Conversions from decimal float to binary float. */ 22 23 /* Conversions from _Decimal32. */ 24 d32 = 2.0df; 25 sf = d32; 26 if (sf != 2.0f) 27 link_error (); 28 29 df = d32; 30 if (df != 2.0) 31 link_error (); 32 33 tf = d32; 34 if (tf != 2.0l) 35 link_error (); 36 37 /* Conversions from _Decimal64. */ 38 d64 = -7.0dd; 39 sf = d64; 40 if (sf != -7.0f) 41 link_error (); 42 43 df = d64; 44 if (df != -7.0) 45 link_error (); 46 47 tf = d64; 48 if (tf != -7.0l) 49 link_error (); 50 51 /* Conversions from _Decimal128. */ 52 d128 = 30.0dl; 53 sf = d128; 54 if (sf != 30.0f) 55 link_error (); 56 57 df = d128; 58 if (df != 30.0) 59 link_error (); 60 61 df = d128; 62 if (df != 30.0l) 63 link_error (); 64 65 /* Conversions from binary float to decimal float. */ 66 sf = 30.0f; 67 d128 = sf; 68 if (d128 != 30.0dl) 69 link_error (); 70 71 d64 = sf; 72 if (d64 != 30.0dd) 73 link_error (); 74 75 d32 = sf; 76 if (d32 != 30.0df) 77 link_error (); 78 79 df = -2.0; 80 d128 = df; 81 if (d128 != -2.0dl) 82 link_error (); 83 84 d64 = df; 85 if (d64 != -2.0dd) 86 link_error (); 87 88 d32 = df; 89 if (d32 != -2.0df) 90 link_error (); 91 92 tf = -22.0l; 93 d128 = tf; 94 if (d128 != -22.0dl) 95 link_error (); 96 97 d64 = tf; 98 if (d64 != -22.0dd) 99 link_error (); 100 101 d32 = tf; 102 if (d32 != -22.0df) 103 link_error (); 104 105 /* 2**(-11) = 0.00048828125. */ 106 d128 = 0.000488281251dl; 107 sf = d128; 108 if (sf != 0.00048828125f) 109 link_error (); 110 /* 2**(-25) = 0.298023223876953125E-7. */ 111 d128 = 2.98023223876953125E-8dl; 112 df = d128; 113 if (df < (2.9802322387695312e-08 - 0.00000000001) 114 || df > (2.9802322387695312e-08 + 0.00000000001)) 115 link_error (); 116 117 return 0; 118} 119