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 */