diff -r 0f71b9639207 liboctave/lo-mappers.cc --- a/liboctave/lo-mappers.cc Fri Apr 01 09:37:58 2011 -0700 +++ b/liboctave/lo-mappers.cc Sat Apr 02 13:22:39 2011 +0200 @@ -631,3 +631,20 @@ else return static_cast ((x > 0) ? (x + 0.5) : (x - 0.5)); } + +template +T largest_consecutive_flint::get() +{ + if (lc_flint ==0){ + T temp = 1; + for (int i=0; i::digits10; ++i){ + temp *= 10; + } + lc_flint = temp; + } + return lc_flint; +} + +template +T largest_consecutive_flint::lc_flint = 0; + diff -r 0f71b9639207 liboctave/lo-mappers.h --- a/liboctave/lo-mappers.h Fri Apr 01 09:37:58 2011 -0700 +++ b/liboctave/lo-mappers.h Sat Apr 02 13:22:39 2011 +0200 @@ -400,4 +400,14 @@ return retval; } +template +class largest_consecutive_flint +{ + public: + static T get(); + + private: + static T lc_flint; +}; + #endif diff -r 0f71b9639207 src/DLD-FUNCTIONS/gcd.cc --- a/src/DLD-FUNCTIONS/gcd.cc Fri Apr 01 09:37:58 2011 -0700 +++ b/src/DLD-FUNCTIONS/gcd.cc Sat Apr 02 13:22:39 2011 +0200 @@ -45,6 +45,12 @@ double aa = fabs (a); double bb = fabs (b); + if (aa > largest_consecutive_flint::get() + || bb > largest_consecutive_flint::get()){ + (*current_liboctave_warning_handler) + ("gcd: input value greater than largest consecutive flint.\n \ + Result may be inaccurate."); + } while (bb != 0) { @@ -104,7 +110,7 @@ { T aa = a.abs ().value (); T bb = b.abs ().value (); - + while (bb != 0) { T tt = aa % bb; @@ -125,6 +131,13 @@ double aa = fabs (a); double bb = fabs (b); + if (aa > largest_consecutive_flint::get() + || bb > largest_consecutive_flint::get()){ + (*current_liboctave_warning_handler) + ("gcd: input value greater than largest consecutive flint.\n \ + Result may be inaccurate."); + } + double xx = 0, yy = 1; double lx = 1, ly = 0;