annotate gcc/testsuite/c-c++-common/dfp/convert-dfp.c @ 158:494b0b89df80 default tip

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