Mercurial > hg > octave-lyh
comparison liboctave/oct-inttypes.cc @ 10405:cc69a17ec801
remove integer math warnings
author | Jaroslav Hajek <highegg@gmail.com> |
---|---|
date | Tue, 09 Mar 2010 08:06:30 +0100 |
parents | 07ebe522dac2 |
children | fd0a3ac60b0e |
comparison
equal
deleted
inserted
replaced
10404:b40a5fd3af41 | 10405:cc69a17ec801 |
---|---|
178 } | 178 } |
179 | 179 |
180 return res; | 180 return res; |
181 | 181 |
182 overflow: | 182 overflow: |
183 ftrunc = true; | |
184 return max_val (); | 183 return max_val (); |
185 } | 184 } |
186 | 185 |
187 template <> | 186 template <> |
188 int64_t | 187 int64_t |
238 | 237 |
239 if (positive) | 238 if (positive) |
240 { | 239 { |
241 if (res > static_cast<uint64_t> (max_val ())) | 240 if (res > static_cast<uint64_t> (max_val ())) |
242 { | 241 { |
243 ftrunc = true; | |
244 return max_val (); | 242 return max_val (); |
245 } | 243 } |
246 else | 244 else |
247 return static_cast<int64_t> (res); | 245 return static_cast<int64_t> (res); |
248 } | 246 } |
249 else | 247 else |
250 { | 248 { |
251 if (res > static_cast<uint64_t> (-min_val ())) | 249 if (res > static_cast<uint64_t> (-min_val ())) |
252 { | 250 { |
253 ftrunc = true; | |
254 return min_val (); | 251 return min_val (); |
255 } | 252 } |
256 else | 253 else |
257 return -static_cast<int64_t> (res); | 254 return -static_cast<int64_t> (res); |
258 } | 255 } |
259 | 256 |
260 | 257 |
261 overflow: | 258 overflow: |
262 ftrunc = true; | |
263 return positive ? max_val () : min_val (); | 259 return positive ? max_val () : min_val (); |
264 | 260 |
265 } | 261 } |
266 | 262 |
267 #define INT_DOUBLE_BINOP_DECL(OP,SUFFIX) \ | 263 #define INT_DOUBLE_BINOP_DECL(OP,SUFFIX) \ |
620 /* | 616 /* |
621 | 617 |
622 %!assert(intmax("int64")/intmin("int64"),int64(-1)) | 618 %!assert(intmax("int64")/intmin("int64"),int64(-1)) |
623 %!assert(intmin("int64")/int64(-1),intmax("int64")) | 619 %!assert(intmin("int64")/int64(-1),intmax("int64")) |
624 %!assert(int64(2**63),intmax("int64")) | 620 %!assert(int64(2**63),intmax("int64")) |
625 %!test | |
626 %! wstate = warning("query", "Octave:int-convert-overflow"); | |
627 %! warning("on", "Octave:int-convert-overflow"); | |
628 %! fail("int64(2**63)","warning",".*") | |
629 %! warning(wstate.state, "Octave:int-convert-overflow"); | |
630 %!assert(uint64(2**64),intmax("uint64")) | 621 %!assert(uint64(2**64),intmax("uint64")) |
631 %!test | 622 %!test |
632 %! a = 1.9*2^61; b = uint64(a); b++; assert(b > a) | 623 %! a = 1.9*2^61; b = uint64(a); b++; assert(b > a) |
633 %!test | 624 %!test |
634 %! a = -1.9*2^61; b = int64(a); b++; assert(b > a) | 625 %! a = -1.9*2^61; b = int64(a); b++; assert(b > a) |
635 %!test | 626 %!test |
636 %! a = int64(-2**60) + 2; assert(1.25*a == (5*a)/4) | 627 %! a = int64(-2**60) + 2; assert(1.25*a == (5*a)/4) |
637 %!test | 628 %!test |
638 %! a = uint64(2**61) + 2; assert(1.25*a == (5*a)/4) | 629 %! a = uint64(2**61) + 2; assert(1.25*a == (5*a)/4) |
639 %!assert(int32(2**31+0.5),intmax('int32')) | 630 %!assert(int32(2**31+0.5),intmax('int32')) |
640 %!test | |
641 %! wstate = warning("query", "Octave:int-convert-overflow"); | |
642 %! warning("on", "Octave:int-convert-overflow"); | |
643 %! fail("int32(2**31+0.5)","warning",".*") | |
644 %! warning(wstate.state, "Octave:int-convert-overflow"); | |
645 %!assert(int32(-2**31-0.5),intmin('int32')) | 631 %!assert(int32(-2**31-0.5),intmin('int32')) |
646 %!test | |
647 %! wstate = warning("query", "Octave:int-convert-overflow"); | |
648 %! warning("on", "Octave:int-convert-overflow"); | |
649 %! fail("int32(-2**31-0.5)","warning",".*") | |
650 %! warning(wstate.state, "Octave:int-convert-overflow"); | |
651 %!assert((int64(2**62)+1)**1, int64(2**62)+1) | 632 %!assert((int64(2**62)+1)**1, int64(2**62)+1) |
652 %!assert((int64(2**30)+1)**2, int64(2**60+2**31) + 1) | 633 %!assert((int64(2**30)+1)**2, int64(2**60+2**31) + 1) |
653 */ | 634 */ |