4 typedef long long int ll_t;
5 typedef unsigned long long int ull_t;
8 ll_t mul_ll(ll_t a, ll_t b) __attribute__((noinline));
9 ll_t shl_ll(ll_t a, ll_t b) __attribute__((noinline));
10 ll_t shr_ll(ll_t a, ll_t b) __attribute__((noinline));
11 ll_t add_ll(ll_t a, ll_t b) __attribute__((noinline));
12 ll_t sub_ll(ll_t a, ll_t b) __attribute__((noinline));
13 ll_t div_ll(ll_t a, ll_t b) __attribute__((noinline));
14 ll_t mod_ll(ll_t a, ll_t b) __attribute__((noinline));
15 ll_t divmod_ll(ll_t a, ll_t b) __attribute__((noinline));
16 ll_t abs_ll(ll_t a) __attribute__((noinline));
17 ll_t neg_ll(ll_t a) __attribute__((noinline));
19 ull_t mul_ull(ull_t a, ull_t b) __attribute__((noinline));
20 ull_t shl_ull(ull_t a, ull_t b) __attribute__((noinline));
21 ull_t shr_ull(ull_t a, ull_t b) __attribute__((noinline));
22 ull_t add_ull(ull_t a, ull_t b) __attribute__((noinline));
23 ull_t sub_ull(ull_t a, ull_t b) __attribute__((noinline));
24 ull_t div_ull(ull_t a, ull_t b) __attribute__((noinline));
25 ull_t mod_ull(ull_t a, ull_t b) __attribute__((noinline));
26 ull_t divmod_ull(ull_t a, ull_t b) __attribute__((noinline));
27 ull_t neg_ull(ull_t a) __attribute__((noinline));
30 ll_t mul_ll(ll_t a, ll_t b) {
34 ll_t shl_ll(ll_t a, ll_t b) {
38 ll_t shr_ll(ll_t a, ll_t b) {
42 ll_t add_ll(ll_t a, ll_t b) {
46 ll_t sub_ll(ll_t a, ll_t b) {
50 ll_t div_ll(ll_t a, ll_t b) {
54 ll_t mod_ll(ll_t a, ll_t b) {
58 ll_t divmod_ll(ll_t a, ll_t b) {
59 return (a / b) + (a % b);
67 return a < 0 ? -a : a;
71 double conv_ll_d(ll_t a) {
75 ll_t conv_d_ll(double a) {
82 ull_t mul_ull(ull_t a, ull_t b) {
86 ull_t shl_ull(ull_t a, ull_t b) {
90 ull_t shr_ull(ull_t a, ull_t b) {
94 ull_t add_ull(ull_t a, ull_t b) {
98 ull_t sub_ull(ull_t a, ull_t b) {
102 ull_t div_ull(ull_t a, ull_t b) {
106 ull_t mod_ull(ull_t a, ull_t b) {
110 ull_t divmod_ull(ull_t a, ull_t b) {
111 return (a / b) + (a % b);
114 ull_t neg_ull(ull_t a) {
119 double conv_ull_d(ull_t a) {
123 ull_t conv_d_ull(double a) {
130 ll_t b = 0x123456789LL;
131 ll_t c = 0x8001023000002460LL;
132 double d = (double)c;
135 ull_t ub = 0x123456789ULL;
136 ull_t uc = 0x8001023000002460ULL;
138 printf("%lld * %lld = %lld\n", a, b, mul_ll(a, b));
139 printf("%lld + %lld = %lld\n", a, b, add_ll(a, b));
140 printf("%lld - %lld = %lld\n", a, b, sub_ll(a, b));
141 printf("%lld / %lld = %lld\n", b, a, div_ll(b, a));
142 printf("%lld %% %lld = %lld\n", b, a, mod_ll(b, a));
143 printf("%lld / + %% %lld = %lld\n", b, a, divmod_ll(b, a));
144 printf("%lld << %d = %lld\n", a, 2, shl_ll(a, 2));
145 printf("%lld << %d = %lld\n", a, 33, shl_ll(a, 33));
146 printf("%lld >> %d = %lld\n", a, 2, shr_ll(a, 2));
147 printf("%lld >> %d = %lld\n", c, 33, shr_ll(c, 33));
148 printf("abs(%lld) = %lld\n", c, abs_ll(c));
149 printf("neg(%lld) = %lld\n", b, neg_ll(b));
151 printf("conv(%lld) = %lf\n", c, conv_ll_d(c));
152 printf("conv(%lf) = %lld\n", d, conv_d_ll(d));
155 printf("%llu * %llu = %llu\n", ua, ub, mul_ull(ua, ub));
156 printf("%llu + %llu = %llu\n", ua, ub, add_ull(ua, ub));
157 printf("%llu - %llu = %llu\n", ua, ub, sub_ull(ua, ub));
158 printf("%llu / %llu = %llu\n", ub, ua, div_ull(ub, ua));
159 printf("%llu %% %llu = %llu\n", ub, ua, mod_ull(ub, ua));
160 printf("%llu / + %% %llu = %llu\n", ub, ua, divmod_ull(ub, ua));
161 printf("%llu << %d = %llu\n", ua, 2, shl_ull(ua, 2));
162 printf("%llu << %d = %llu\n", ua, 33, shl_ull(ua, 33));
163 printf("%llu >> %d = %llu\n", ua, 2, shr_ull(ua, 2));
164 printf("%llu >> %d = %llu\n", uc, 33, shr_ll(uc, 33));
165 printf("neg(%llu) = %llu\n", ub, neg_ull(ub));
167 printf("conv(%llu) = %lf\n", uc, conv_ull_d(uc));
168 printf("conv(%lf) = %llu\n", d, conv_d_ull(d));