一个判断相乘是否溢出的小例子

使用了Boost.Integer

 

#include <iostream> #include <boost/integer.hpp> using namespace std; template <typename T> bool is_multiply_overflow(T a, T b) { T max_t = numeric_limits<T>::max(); T zero(0); return (a!=zero && max_t/a < b); } void test_equal(bool a, bool b) { if(a==b) cout << "passed" <<endl; else cout << "failed" <<endl; } void test_is_multiply_overflow() { test_equal(false, is_multiply_overflow<int>(12345,6789)); test_equal(true, is_multiply_overflow<int>(123456,56789)); test_equal(false, is_multiply_overflow<double>(123456789.0,123456789.0)); test_equal(false, is_multiply_overflow<double>(0.0,123456789.0)); test_equal(false, is_multiply_overflow<double>(1,1)); } int main() { test_is_multiply_overflow(); return 0; }

你可能感兴趣的:(一个判断相乘是否溢出的小例子)